[libdazzle] menu-button: be consistent about accel/icon visibility



commit 4de260d9f58b336bb904523d541013852cd1b05e
Author: Christian Hergert <chergert redhat com>
Date:   Mon Jul 10 18:17:40 2017 -0700

    menu-button: be consistent about accel/icon visibility

 src/menus/dzl-menu-button-section.c |   65 +++++++++++++++++++++++++++++++++-
 src/menus/dzl-menu-button.c         |   35 +++++++------------
 tests/test-joined-menu.c            |    2 +
 3 files changed, 78 insertions(+), 24 deletions(-)
---
diff --git a/src/menus/dzl-menu-button-section.c b/src/menus/dzl-menu-button-section.c
index 6d625b2..ee297f3 100644
--- a/src/menus/dzl-menu-button-section.c
+++ b/src/menus/dzl-menu-button-section.c
@@ -35,12 +35,17 @@ struct _DzlMenuButtonSection
   /* Template references */
   GtkLabel       *label;
   DzlBox         *items_box;
+
+  guint           show_accels : 1;
+  guint           show_icons : 1;
 };
 
 enum {
   PROP_0,
   PROP_LABEL,
   PROP_MODEL,
+  PROP_SHOW_ACCELS,
+  PROP_SHOW_ICONS,
   PROP_TEXT_SIZE_GROUP,
   N_PROPS
 };
@@ -50,6 +55,46 @@ G_DEFINE_TYPE (DzlMenuButtonSection, dzl_menu_button_section, GTK_TYPE_BOX)
 static GParamSpec *properties [N_PROPS];
 
 static void
+update_show_accel (GtkWidget            *widget,
+                   DzlMenuButtonSection *self)
+{
+  if (DZL_IS_MENU_BUTTON_ITEM (widget))
+    g_object_set (widget, "show-accel", self->show_accels, NULL);
+}
+
+static void
+dzl_menu_button_section_set_show_accels (DzlMenuButtonSection *self,
+                                         gboolean              show_accels)
+{
+  g_assert (DZL_IS_MENU_BUTTON_SECTION (self));
+
+  self->show_accels = !!show_accels;
+  gtk_container_foreach (GTK_CONTAINER (self->items_box),
+                         (GtkCallback) update_show_accel,
+                         self);
+}
+
+static void
+update_show_icon (GtkWidget            *widget,
+                  DzlMenuButtonSection *self)
+{
+  if (DZL_IS_MENU_BUTTON_ITEM (widget))
+    g_object_set (widget, "show-image", self->show_icons, NULL);
+}
+
+static void
+dzl_menu_button_section_set_show_icons (DzlMenuButtonSection *self,
+                                        gboolean              show_icons)
+{
+  g_assert (DZL_IS_MENU_BUTTON_SECTION (self));
+
+  self->show_icons = !!show_icons;
+  gtk_container_foreach (GTK_CONTAINER (self->items_box),
+                         (GtkCallback) update_show_icon,
+                         self);
+}
+
+static void
 dzl_menu_button_section_items_changed (DzlMenuButtonSection *self,
                                        guint                 position,
                                        guint                 removed,
@@ -83,8 +128,8 @@ dzl_menu_button_section_items_changed (DzlMenuButtonSection *self,
       item = g_object_new (DZL_TYPE_MENU_BUTTON_ITEM,
                            "action-name", action,
                            "action-target", target,
-                           "show-image", TRUE,
-                           "show-accel", TRUE,
+                           "show-image", self->show_icons,
+                           "show-accel", self->show_accels,
                            "icon-name", verb_icon_name,
                            "text", label,
                            "text-size-group", self->text_size_group,
@@ -173,6 +218,14 @@ dzl_menu_button_section_set_property (GObject      *object,
                               !dzl_str_empty0 (g_value_get_string (value)));
       break;
 
+    case PROP_SHOW_ICONS:
+      dzl_menu_button_section_set_show_icons (self, g_value_get_boolean (value));
+      break;
+
+    case PROP_SHOW_ACCELS:
+      dzl_menu_button_section_set_show_accels (self, g_value_get_boolean (value));
+      break;
+
     case PROP_TEXT_SIZE_GROUP:
       self->text_size_group = g_value_dup_object (value);
       break;
@@ -193,6 +246,14 @@ dzl_menu_button_section_class_init (DzlMenuButtonSectionClass *klass)
 
   widget_class->destroy = dzl_menu_button_section_destroy;
 
+  properties [PROP_SHOW_ACCELS] =
+    g_param_spec_boolean ("show-accels", NULL, NULL, FALSE,
+                          (G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS));
+
+  properties [PROP_SHOW_ICONS] =
+    g_param_spec_boolean ("show-icons", NULL, NULL, FALSE,
+                          (G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS));
+
   properties [PROP_MODEL] =
     g_param_spec_object ("model", NULL, NULL,
                          G_TYPE_MENU_MODEL,
diff --git a/src/menus/dzl-menu-button.c b/src/menus/dzl-menu-button.c
index f17e514..1d7bd81 100644
--- a/src/menus/dzl-menu-button.c
+++ b/src/menus/dzl-menu-button.c
@@ -60,39 +60,28 @@ G_DEFINE_TYPE_WITH_PRIVATE (DzlMenuButton, dzl_menu_button, GTK_TYPE_MENU_BUTTON
 static GParamSpec *properties [N_PROPS];
 
 static void
-collect_items_sections (GtkWidget *widget,
-                        GPtrArray *ar)
+collect_items_sections (GtkWidget     *widget,
+                        DzlMenuButton *self)
 {
-  GtkWidget *item;
+  DzlMenuButtonPrivate *priv = dzl_menu_button_get_instance_private (self);
 
-  item = dzl_gtk_widget_find_child_typed (widget, DZL_TYPE_MENU_BUTTON_ITEM);
-  if (item)
-    g_ptr_array_add (ar, item);
+  if (DZL_IS_MENU_BUTTON_SECTION (widget))
+    g_object_set (widget,
+                  "show-accels", priv->show_accels,
+                  "show-icons", priv->show_icons,
+                  NULL);
 }
 
 static void
 update_image_and_accels (DzlMenuButton *self)
 {
   DzlMenuButtonPrivate *priv = dzl_menu_button_get_instance_private (self);
-  g_autoptr(GPtrArray) ar = g_ptr_array_new ();
-  gboolean show_image = dzl_menu_button_get_show_icons (self);
-  gboolean show_accel = dzl_menu_button_get_show_accels (self);
+
+  g_assert (DZL_IS_MENU_BUTTON (self));
 
   gtk_container_foreach (GTK_CONTAINER (priv->popover_box),
                          (GtkCallback) collect_items_sections,
-                         ar);
-
-  for (guint i = 0; i < ar->len; i++)
-    {
-      DzlMenuButtonItem *item = g_ptr_array_index (ar, i);
-
-      g_assert (DZL_IS_MENU_BUTTON_ITEM (item));
-
-      g_object_set (item,
-                    "show-image", show_image,
-                    "show-accel", show_accel,
-                    NULL);
-    }
+                         self);
 }
 
 static void
@@ -110,6 +99,8 @@ dzl_menu_button_add_linked_model (DzlMenuButton *self,
   section = g_object_new (DZL_TYPE_MENU_BUTTON_SECTION,
                           "label", label,
                           "model", model,
+                          "show-accels", priv->show_accels,
+                          "show-icons", priv->show_icons,
                           "text-size-group", priv->text_size_group,
                           "visible", TRUE,
                           NULL);
diff --git a/tests/test-joined-menu.c b/tests/test-joined-menu.c
index 9cac79a..3f815ab 100644
--- a/tests/test-joined-menu.c
+++ b/tests/test-joined-menu.c
@@ -79,6 +79,8 @@ main (gint argc,
                          NULL);
   menu_button = g_object_new (DZL_TYPE_MENU_BUTTON,
                               "show-arrow", TRUE,
+                              "show-accels", TRUE,
+                              "show-icons", TRUE,
                               "icon-name", "document-open-symbolic",
                               "model", joined,
                               "visible", TRUE,


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