[gtk+] GtkTreeView: Avoid interference with animation
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] GtkTreeView: Avoid interference with animation
- Date: Mon, 14 Jul 2014 03:05:53 +0000 (UTC)
commit daf05ad987f05966556ef59e7fa3b4f69571d9bf
Author: Matthias Clasen <mclasen redhat com>
Date: Sun Jul 13 22:00:59 2014 -0400
GtkTreeView: Avoid interference with animation
The animated scrolling interferes with incremental validation.
As short-term solution, disable scrolling animation during
incremental validation. This is not a proper solution, but
it avoids broken behavior like scrollbars that are not reacting
to clicks. The problem was visible, e.g. in the list view
example in gtk3-demo.
gtk/gtktreeview.c | 29 +++++++++++++++++++++++++++--
1 files changed, 27 insertions(+), 2 deletions(-)
---
diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c
index d11c3fd..e648ffc 100644
--- a/gtk/gtktreeview.c
+++ b/gtk/gtktreeview.c
@@ -6919,11 +6919,31 @@ do_validate_rows (GtkTreeView *tree_view, gboolean queue_resize)
return retval;
}
+static void
+disable_adjustment_animation (GtkTreeView *tree_view)
+{
+ gtk_adjustment_enable_animation (tree_view->priv->vadjustment,
+ NULL,
+ gtk_adjustment_get_animation_duration (tree_view->priv->vadjustment));
+}
+
+static void
+maybe_reenable_adjustment_animation (GtkTreeView *tree_view)
+{
+ if (tree_view->priv->presize_handler_tick_cb != 0 ||
+ tree_view->priv->validate_rows_timer != 0)
+ return;
+
+ gtk_adjustment_enable_animation (tree_view->priv->vadjustment,
+ gtk_widget_get_frame_clock (GTK_WIDGET (tree_view)),
+ gtk_adjustment_get_animation_duration (tree_view->priv->vadjustment));
+}
+
static gboolean
do_presize_handler (GtkTreeView *tree_view)
{
if (tree_view->priv->mark_rows_col_dirty)
- {
+ {
if (tree_view->priv->tree)
_gtk_rbtree_column_invalid (tree_view->priv->tree);
tree_view->priv->mark_rows_col_dirty = FALSE;
@@ -6948,7 +6968,9 @@ do_presize_handler (GtkTreeView *tree_view)
MAX (gtk_adjustment_get_upper (tree_view->priv->vadjustment),
requisition.height));
gtk_widget_queue_resize (GTK_WIDGET (tree_view));
}
-
+
+ maybe_reenable_adjustment_animation (tree_view);
+
return FALSE;
}
@@ -6979,6 +7001,7 @@ validate_rows (GtkTreeView *tree_view)
{
g_source_remove (tree_view->priv->validate_rows_timer);
tree_view->priv->validate_rows_timer = 0;
+ maybe_reenable_adjustment_animation (tree_view);
}
return retval;
@@ -6990,6 +7013,8 @@ install_presize_handler (GtkTreeView *tree_view)
if (! gtk_widget_get_realized (GTK_WIDGET (tree_view)))
return;
+ disable_adjustment_animation (tree_view);
+
if (! tree_view->priv->presize_handler_tick_cb)
{
tree_view->priv->presize_handler_tick_cb =
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]