[gtk/inspector-tweaks: 6/7] inspector: Manage visibility of stack pages



commit 7c2ce72b5f86690f259a00a0f01be288d8de436a
Author: Matthias Clasen <mclasen redhat com>
Date:   Tue Apr 2 23:24:57 2019 +0000

    inspector: Manage visibility of stack pages
    
    The hand-rolled stack combo we were using before
    was looking at the visibility of the page itself
    to show or hide items. Other stack switchers
    expect us to use the GtkStackPage::visible
    property for this.

 gtk/inspector/actions.c       | 18 +++++++++++++-----
 gtk/inspector/controllers.c   | 13 ++++++++++++-
 gtk/inspector/css-node-tree.c |  9 +++++++--
 gtk/inspector/data-list.c     | 10 ++++++++--
 gtk/inspector/magnifier.c     | 11 +++++++++--
 gtk/inspector/menu.c          | 22 ++++++++++++++++------
 gtk/inspector/size-groups.c   | 16 ++++++++++------
 7 files changed, 75 insertions(+), 24 deletions(-)
---
diff --git a/gtk/inspector/actions.c b/gtk/inspector/actions.c
index cd6f413ac2..c4ec553c27 100644
--- a/gtk/inspector/actions.c
+++ b/gtk/inspector/actions.c
@@ -28,6 +28,7 @@
 #include "gtkwidgetprivate.h"
 #include "gtkpopover.h"
 #include "gtklabel.h"
+#include "gtkstack.h"
 
 enum
 {
@@ -167,13 +168,14 @@ action_state_changed_cb (GActionGroup        *group,
 
 static void
 add_group (GtkInspectorActions *sl,
+           GtkStackPage        *page,
            GActionGroup        *group,
            const gchar         *prefix)
 {
   gint i;
   gchar **names;
 
-  gtk_widget_show (GTK_WIDGET (sl));
+  g_object_set (page, "visible", TRUE, NULL);
 
   g_signal_connect (group, "action-added", G_CALLBACK (action_added_cb), sl);
   g_signal_connect (group, "action-removed", G_CALLBACK (action_removed_cb), sl);
@@ -203,16 +205,22 @@ void
 gtk_inspector_actions_set_object (GtkInspectorActions *sl,
                                   GObject             *object)
 {
-  gtk_widget_hide (GTK_WIDGET (sl));
+  GtkWidget *stack;
+  GtkStackPage *page;
+
+  stack = gtk_widget_get_parent (GTK_WIDGET (sl));
+  page = gtk_stack_get_page (GTK_STACK (stack), GTK_WIDGET (sl));
+
+  g_object_set (page, "visible", FALSE, NULL);
   g_hash_table_foreach (sl->priv->groups, disconnect_group, sl);
   g_hash_table_remove_all (sl->priv->groups);
   g_hash_table_remove_all (sl->priv->iters);
   gtk_list_store_clear (sl->priv->model);
   
   if (GTK_IS_APPLICATION (object))
-    add_group (sl, G_ACTION_GROUP (object), "app");
+    add_group (sl, page, G_ACTION_GROUP (object), "app");
   else if (GTK_IS_APPLICATION_WINDOW (object))
-    add_group (sl, G_ACTION_GROUP (object), "win");
+    add_group (sl, page, G_ACTION_GROUP (object), "win");
   else if (GTK_IS_WIDGET (object))
     {
       const gchar **prefixes;
@@ -225,7 +233,7 @@ gtk_inspector_actions_set_object (GtkInspectorActions *sl,
           for (i = 0; prefixes[i]; i++)
             {
               group = gtk_widget_get_action_group (GTK_WIDGET (object), prefixes[i]);
-              add_group (sl, group, prefixes[i]);
+              add_group (sl, page, group, prefixes[i]);
             }
           g_free (prefixes);
         }
diff --git a/gtk/inspector/controllers.c b/gtk/inspector/controllers.c
index 179b4fa625..4fa0b313b8 100644
--- a/gtk/inspector/controllers.c
+++ b/gtk/inspector/controllers.c
@@ -33,6 +33,7 @@
 #include "gtkscrolledwindow.h"
 #include "gtksortlistmodel.h"
 #include "gtkwidgetprivate.h"
+#include "gtkstack.h"
 
 enum
 {
@@ -204,13 +205,23 @@ void
 gtk_inspector_controllers_set_object (GtkInspectorControllers *sl,
                                       GObject                 *object)
 {
+  GtkWidget *stack;
+  GtkStackPage *page;
   GtkInspectorControllersPrivate *priv = sl->priv;
   GtkMapListModel *map_model;
   GtkFlattenListModel *flatten_model;
   GtkSortListModel *sort_model;
 
+  stack = gtk_widget_get_parent (GTK_WIDGET (sl));
+  page = gtk_stack_get_page (GTK_STACK (stack), GTK_WIDGET (sl));
+
   if (!GTK_IS_WIDGET (object))
-    return;
+    {
+      g_object_set (page, "visible", FALSE, NULL);
+      return;
+    }
+
+  g_object_set (page, "visible", TRUE, NULL);
 
   priv->model = gtk_property_lookup_list_model_new (GTK_TYPE_WIDGET, "parent");
   gtk_property_lookup_list_model_set_object (priv->model, object);
diff --git a/gtk/inspector/css-node-tree.c b/gtk/inspector/css-node-tree.c
index b7d9a3cb13..6093c81d5f 100644
--- a/gtk/inspector/css-node-tree.c
+++ b/gtk/inspector/css-node-tree.c
@@ -408,6 +408,8 @@ void
 gtk_inspector_css_node_tree_set_object (GtkInspectorCssNodeTree *cnt,
                                         GObject                 *object)
 {
+  GtkWidget *stack;
+  GtkStackPage *page;
   GtkInspectorCssNodeTreePrivate *priv;
   GtkCssNode *node, *root;
   GtkTreePath *path;
@@ -417,13 +419,16 @@ gtk_inspector_css_node_tree_set_object (GtkInspectorCssNodeTree *cnt,
 
   priv = cnt->priv;
 
+  stack = gtk_widget_get_parent (GTK_WIDGET (cnt));
+  page = gtk_stack_get_page (GTK_STACK (stack), GTK_WIDGET (cnt));
+
   if (!GTK_IS_WIDGET (object))
     {
-      gtk_widget_hide (GTK_WIDGET (cnt));
+      g_object_set (page, "visible", FALSE, NULL);
       return;
     }
 
-  gtk_widget_show (GTK_WIDGET (cnt));
+  g_object_set (page, "visible", TRUE, NULL);
 
   root = node = gtk_widget_get_css_node (GTK_WIDGET (object));
   while (gtk_css_node_get_parent (root))
diff --git a/gtk/inspector/data-list.c b/gtk/inspector/data-list.c
index 6ba7955f0e..c15ace1352 100644
--- a/gtk/inspector/data-list.c
+++ b/gtk/inspector/data-list.c
@@ -26,6 +26,7 @@
 #include "gtkcellrenderertext.h"
 #include "gtktogglebutton.h"
 #include "gtklabel.h"
+#include "gtkstack.h"
 
 
 struct _GtkInspectorDataListPrivate
@@ -116,15 +117,20 @@ void
 gtk_inspector_data_list_set_object (GtkInspectorDataList *sl,
                                     GObject              *object)
 {
+  GtkWidget *stack;
+  GtkStackPage *page;
   gchar *title;
 
+  stack = gtk_widget_get_parent (GTK_WIDGET (sl));
+  page = gtk_stack_get_page (GTK_STACK (stack), GTK_WIDGET (sl));
+
   clear_view (sl);
   sl->priv->object = NULL;
   sl->priv->show_data = FALSE;
 
   if (!GTK_IS_TREE_MODEL (object))
     {
-      gtk_widget_hide (GTK_WIDGET (sl));
+      g_object_set (page, "visible", FALSE, NULL);
       return;
     }
 
@@ -132,7 +138,7 @@ gtk_inspector_data_list_set_object (GtkInspectorDataList *sl,
   gtk_label_set_label (GTK_LABEL (sl->priv->object_title), title);
   g_free (title);
 
-  gtk_widget_show (GTK_WIDGET (sl));
+  g_object_set (page, "visible", TRUE, NULL);
 
   sl->priv->object = GTK_TREE_MODEL (object);
   add_columns (sl);
diff --git a/gtk/inspector/magnifier.c b/gtk/inspector/magnifier.c
index f4a0f7e2e3..34cf33fa19 100644
--- a/gtk/inspector/magnifier.c
+++ b/gtk/inspector/magnifier.c
@@ -24,6 +24,7 @@
 
 #include "gtklabel.h"
 #include "gtkadjustment.h"
+#include "gtkstack.h"
 
 enum
 {
@@ -51,16 +52,22 @@ void
 gtk_inspector_magnifier_set_object (GtkInspectorMagnifier *sl,
                                     GObject              *object)
 {
+  GtkWidget *stack;
+  GtkStackPage *page;
+
+  stack = gtk_widget_get_parent (GTK_WIDGET (sl));
+  page = gtk_stack_get_page (GTK_STACK (stack), GTK_WIDGET (sl));
+
   sl->priv->object = NULL;
 
   if (!GTK_IS_WIDGET (object) || !gtk_widget_is_visible (GTK_WIDGET (object)))
     {
-      gtk_widget_hide (GTK_WIDGET (sl));
+      g_object_set (page, "visible", FALSE, NULL);
       _gtk_magnifier_set_inspected (GTK_MAGNIFIER (sl->priv->magnifier), NULL);
       return;
     }
 
-  gtk_widget_show (GTK_WIDGET (sl));
+  g_object_set (page, "visible", TRUE, NULL);
 
   sl->priv->object = GTK_WIDGET (object);
 
diff --git a/gtk/inspector/menu.c b/gtk/inspector/menu.c
index 8a4d1ad93f..3374418942 100644
--- a/gtk/inspector/menu.c
+++ b/gtk/inspector/menu.c
@@ -23,6 +23,7 @@
 #include "gtktreestore.h"
 #include "gtkwidgetprivate.h"
 #include "gtklabel.h"
+#include "gtkstack.h"
 
 
 enum
@@ -49,11 +50,13 @@ gtk_inspector_menu_init (GtkInspectorMenu *sl)
 }
 
 static void add_menu (GtkInspectorMenu *sl,
+                      GtkStackPage     *page,
                       GMenuModel       *menu,
                       GtkTreeIter      *parent);
 
 static void
 add_item (GtkInspectorMenu *sl,
+          GtkStackPage     *page,
           GMenuModel       *menu,
           gint              idx,
           GtkTreeIter      *parent)
@@ -91,14 +94,14 @@ add_item (GtkInspectorMenu *sl,
         gtk_tree_store_set (sl->priv->model, &iter,
                             COLUMN_LABEL, _("Unnamed section"),
                             -1);
-      add_menu (sl, model, &iter);
+      add_menu (sl, page, model, &iter);
       g_object_unref (model);
     }
 
   model = g_menu_model_get_item_link (menu, idx, G_MENU_LINK_SUBMENU);
   if (model)
     {
-      add_menu (sl, model, &iter);
+      add_menu (sl, page, model, &iter);
       g_object_unref (model);
     }
 
@@ -110,28 +113,35 @@ add_item (GtkInspectorMenu *sl,
 
 static void
 add_menu (GtkInspectorMenu *sl,
+          GtkStackPage     *page,
           GMenuModel       *menu,
           GtkTreeIter      *parent)
 {
   gint n_items;
   gint i;
 
-  gtk_widget_show (GTK_WIDGET (sl));
+  g_object_set (page, "visible", TRUE, NULL);
 
   n_items = g_menu_model_get_n_items (menu);
   for (i = 0; i < n_items; i++)
-    add_item (sl, menu, i, parent);
+    add_item (sl, page, menu, i, parent);
 }
 
 void
 gtk_inspector_menu_set_object (GtkInspectorMenu *sl,
                                GObject          *object)
 {
-  gtk_widget_hide (GTK_WIDGET (sl));
+  GtkWidget *stack;
+  GtkStackPage *page;
+
+  stack = gtk_widget_get_parent (GTK_WIDGET (sl));
+  page = gtk_stack_get_page (GTK_STACK (stack), GTK_WIDGET (sl));
+
+  g_object_set (page, "visible", FALSE, NULL);
   gtk_tree_store_clear (sl->priv->model);
   
   if (G_IS_MENU_MODEL (object))
-    add_menu (sl, G_MENU_MODEL (object), NULL);
+    add_menu (sl, page, G_MENU_MODEL (object), NULL);
 }
 
 static void
diff --git a/gtk/inspector/size-groups.c b/gtk/inspector/size-groups.c
index 0537edba00..6cd583699b 100644
--- a/gtk/inspector/size-groups.c
+++ b/gtk/inspector/size-groups.c
@@ -31,6 +31,7 @@
 #include "gtkstylecontext.h"
 #include "gtkswitch.h"
 #include "gtkwidgetprivate.h"
+#include "gtkstack.h"
 
 
 typedef struct {
@@ -210,7 +211,6 @@ add_widget (GtkInspectorSizeGroups *sl,
   g_object_set (label, "margin", 10, NULL);
   gtk_widget_set_halign (label, GTK_ALIGN_START);
   gtk_widget_set_valign (label, GTK_ALIGN_BASELINE);
-  gtk_widget_show (label);
   gtk_container_add (GTK_CONTAINER (row), label);
   gtk_container_add (GTK_CONTAINER (listbox), row);
 }
@@ -266,18 +266,22 @@ gtk_inspector_size_groups_set_object (GtkInspectorSizeGroups *sl,
                                       GObject                *object)
 {
   GSList *groups, *l;
+  GtkWidget *stack;
+  GtkStackPage *page;
+
+  stack = gtk_widget_get_parent (GTK_WIDGET (sl));
+  page = gtk_stack_get_page (GTK_STACK (stack), GTK_WIDGET (sl));
+
+  g_object_set (page, "visible", FALSE, NULL);
 
   clear_view (sl);
 
   if (!GTK_IS_WIDGET (object))
-    {
-      gtk_widget_hide (GTK_WIDGET (sl));
-      return;
-    }
+    return;
 
   groups = _gtk_widget_get_sizegroups (GTK_WIDGET (object));
   if (groups)
-    gtk_widget_show (GTK_WIDGET (sl));
+    g_object_set (page, "visible", TRUE, NULL);
   for (l = groups; l; l = l->next)
     {
       GtkSizeGroup *group = l->data;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]