From 3e101922d8e64a41978b17e3a2a525cb104edb60 Mon Sep 17 00:00:00 2001 From: Massimo Valentini Date: Wed, 11 Oct 2023 13:24:31 -0400 Subject: [PATCH] widgets: Prevent Toolbox autoscroll bug In Preferences > Toolbox, clicking on an item below the initial scroll window view causes it to jump to the top automatically. This patch prevents this by setting the clicked index in the GtkTreeView before grabbing focus. --- app/widgets/gimpcontainertreeview.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/app/widgets/gimpcontainertreeview.c b/app/widgets/gimpcontainertreeview.c index 1d93865fe1..015da1f78f 100644 --- a/app/widgets/gimpcontainertreeview.c +++ b/app/widgets/gimpcontainertreeview.c @@ -1268,9 +1268,6 @@ gimp_container_tree_view_button (GtkWidget *widget, tree_view->priv->dnd_renderer = NULL; - if (bevent->type != GDK_BUTTON_RELEASE && ! gtk_widget_has_focus (widget)) - gtk_widget_grab_focus (widget); - if (gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), bevent->x, bevent->y, &path, &column, NULL, NULL)) @@ -1285,6 +1282,13 @@ gimp_container_tree_view_button (GtkWidget *widget, gboolean multisel_mode; GdkModifierType modifiers = (bevent->state & gimp_get_all_modifiers_mask ()); + /* Confirm the path is set before grabbing focus, as it can cause + * the list to auto-scroll to the top on first click otherwise + */ + gtk_tree_view_set_cursor (GTK_TREE_VIEW (widget), path, NULL, FALSE); + if (bevent->type != GDK_BUTTON_RELEASE && ! gtk_widget_has_focus (widget)) + gtk_widget_grab_focus (widget); + multisel_mode = (gtk_tree_selection_get_mode (tree_view->priv->selection) == GTK_SELECTION_MULTIPLE);