[libdazzle] menus: add basic support for roles



commit 774499f779eaa9f9ee0f9c3afcc43923e3ddfe07
Author: Christian Hergert <chergert redhat com>
Date:   Mon Jul 10 18:51:05 2017 -0700

    menus: add basic support for roles

 src/menus/dzl-menu-button-item.c    |   24 +++++++++++++++++++++++-
 src/menus/dzl-menu-button-section.c |    9 +++++++++
 2 files changed, 32 insertions(+), 1 deletions(-)
---
diff --git a/src/menus/dzl-menu-button-item.c b/src/menus/dzl-menu-button-item.c
index 420ae67..3c8c739 100644
--- a/src/menus/dzl-menu-button-item.c
+++ b/src/menus/dzl-menu-button-item.c
@@ -35,6 +35,9 @@ struct _DzlMenuButtonItem
   DzlShortcutSimpleLabel *accel;
   GtkImage               *image;
 
+  /* -1 is for unset, otherwise GtkButtonRole */
+  gint                    role;
+
   guint                   has_icon : 1;
   guint                   show_image : 1;
 };
@@ -43,6 +46,7 @@ enum {
   PROP_0,
   PROP_ACCEL,
   PROP_ICON_NAME,
+  PROP_ROLE,
   PROP_SHOW_ACCEL,
   PROP_SHOW_IMAGE,
   PROP_TEXT_SIZE_GROUP,
@@ -126,7 +130,12 @@ static void
 dzl_menu_button_item_hierarchy_changed (GtkWidget *widget,
                                         GtkWidget *old_toplevel)
 {
-  dzl_menu_button_item_notify_action_name (DZL_MENU_BUTTON_ITEM (widget), NULL);
+  DzlMenuButtonItem *self = (DzlMenuButtonItem *)widget;
+
+  g_assert (DZL_IS_MENU_BUTTON_ITEM (self));
+
+  if (self->role > -1)
+    dzl_menu_button_item_notify_action_name (self, NULL);
 }
 
 static void
@@ -149,6 +158,12 @@ dzl_menu_button_item_set_property (GObject      *object,
       gtk_widget_set_visible (GTK_WIDGET (self->image), self->has_icon && self->show_image);
       break;
 
+    case PROP_ROLE:
+      self->role = g_value_get_int (value);
+      if (self->role == GTK_BUTTON_ROLE_CHECK)
+        g_object_set (self, "draw-indicator", TRUE, NULL);
+      break;
+
     case PROP_SHOW_ACCEL:
       g_object_set_property (G_OBJECT (self->accel), "show-accel", value);
       break;
@@ -195,6 +210,11 @@ dzl_menu_button_item_class_init (DzlMenuButtonItemClass *klass)
                          NULL,
                          (G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS));
 
+  properties [PROP_ROLE] =
+    g_param_spec_int ("role", NULL, NULL,
+                      -1, GTK_BUTTON_ROLE_RADIO, -1,
+                      (G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
+
   properties [PROP_SHOW_ACCEL] =
     g_param_spec_boolean ("show-accel",
                           "Show Accel",
@@ -230,6 +250,8 @@ dzl_menu_button_item_init (DzlMenuButtonItem *self)
   GtkTextDirection dir;
   GtkBox *box;
 
+  self->role = -1;
+
   dzl_gtk_widget_add_style_class (GTK_WIDGET (self), "dzlmenubuttonitem");
 
   g_signal_connect (self,
diff --git a/src/menus/dzl-menu-button-section.c b/src/menus/dzl-menu-button-section.c
index ee297f3..a46a2e6 100644
--- a/src/menus/dzl-menu-button-section.c
+++ b/src/menus/dzl-menu-button-section.c
@@ -118,19 +118,28 @@ dzl_menu_button_section_items_changed (DzlMenuButtonSection *self,
       g_autofree gchar *action = NULL;
       g_autofree gchar *label = NULL;
       g_autofree gchar *verb_icon_name = NULL;
+      g_autofree gchar *rolestr = NULL;
+      gint role = -1;
 
       g_menu_model_get_item_attribute (menu, i, G_MENU_ATTRIBUTE_LABEL, "s", &label);
       g_menu_model_get_item_attribute (menu, i, "verb-icon-name", "s", &verb_icon_name);
       g_menu_model_get_item_attribute (menu, i, "accel", "s", &accel);
       g_menu_model_get_item_attribute (menu, i, "action", "s", &action);
+      g_menu_model_get_item_attribute (menu, i, "role", "s", &rolestr);
       target = g_menu_model_get_item_attribute_value (menu, i, "target", NULL);
 
+      if (g_strcmp0 (rolestr, "check") == 0)
+        role = GTK_BUTTON_ROLE_CHECK;
+      else if (g_strcmp0 (rolestr, "normal") == 0)
+        role = GTK_BUTTON_ROLE_NORMAL;
+
       item = g_object_new (DZL_TYPE_MENU_BUTTON_ITEM,
                            "action-name", action,
                            "action-target", target,
                            "show-image", self->show_icons,
                            "show-accel", self->show_accels,
                            "icon-name", verb_icon_name,
+                           "role", role,
                            "text", label,
                            "text-size-group", self->text_size_group,
                            "accel", accel,


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