[libdazzle] menus: add basic support for roles
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libdazzle] menus: add basic support for roles
- Date: Tue, 11 Jul 2017 01:51:20 +0000 (UTC)
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]