From: Daniel Boles Date: Mon, 14 Aug 2023 09:48:26 +0000 (+0100) Subject: Inspector: Fix ! flash on select widget @ obj tree X-Git-Tag: archive/raspbian/4.12.3+ds-1+rpi1~1^2^2^2~22^2^2~29 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=0a50e1e6630074c3d04dbfb9ebbb13e9f18e1988;p=gtk4.git Inspector: Fix ! flash on select widget @ obj tree Widgets are flashed by the window when it receives Tree::object-selected - but we were emitting said signal from select_object(), i.e. if we were made to select by an external caller. We should also emit it if the user interactively selects an item, so the window receives+flashes the widget fixes https://gitlab.gnome.org/GNOME/gtk/-/issues/6022 --- diff --git a/gtk/inspector/object-tree.c b/gtk/inspector/object-tree.c index b86f9bcbe5..bda662c094 100644 --- a/gtk/inspector/object-tree.c +++ b/gtk/inspector/object-tree.c @@ -1312,10 +1312,22 @@ gtk_inspector_object_tree_select_object (GtkInspectorObjectTree *wt, GTK_LIST_SCROLL_SELECT | GTK_LIST_SCROLL_FOCUS, NULL); - g_signal_emit (wt, signals[OBJECT_SELECTED], 0, object); // FIXME + g_signal_emit (wt, signals[OBJECT_SELECTED], 0, object); g_object_unref (row_item); } +static void +on_selected_item (GtkSingleSelection *selection, + GParamSpec *pspec, + GtkInspectorObjectTree *wt) +{ + GObject *selected = gtk_single_selection_get_selected_item (selection); + GtkTreeListRow *row = GTK_TREE_LIST_ROW (selected); + GObject *object = gtk_tree_list_row_get_item (row); + g_signal_emit (wt, signals[OBJECT_SELECTED], 0, object); + g_object_unref (object); +} + void gtk_inspector_object_tree_set_display (GtkInspectorObjectTree *wt, GdkDisplay *display) @@ -1329,4 +1341,5 @@ gtk_inspector_object_tree_set_display (GtkInspectorObjectTree *wt, wt->priv->selection = gtk_single_selection_new (g_object_ref (G_LIST_MODEL (wt->priv->tree_model))); gtk_column_view_set_model (GTK_COLUMN_VIEW (wt->priv->list), GTK_SELECTION_MODEL (wt->priv->selection)); + g_signal_connect (wt->priv->selection, "notify::selected-item", G_CALLBACK (on_selected_item), wt); }