Inspector: Fix ! flash on select widget @ obj tree
authorDaniel Boles <dboles.src@gmail.com>
Mon, 14 Aug 2023 09:48:26 +0000 (10:48 +0100)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 24 Aug 2023 14:21:11 +0000 (10:21 -0400)
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

gtk/inspector/object-tree.c

index b86f9bcbe5b4330576655da874841707c3090943..bda662c094bdbd2058967a0ebc3b5484f9ae6946 100644 (file)
@@ -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);
 }