forked from AuroraMiddleware/gtk
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.
This commit is contained in:
parent
7086080b03
commit
faa676ffa7
@ -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 =
|
||||
|
Loading…
Reference in New Issue
Block a user