[libdazzle] menu-button: be consistent about accel/icon visibility
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libdazzle] menu-button: be consistent about accel/icon visibility
- Date: Tue, 11 Jul 2017 01:18:02 +0000 (UTC)
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]