[gnome-builder] menu: add gb_menu_extension_new_for_section()
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] menu: add gb_menu_extension_new_for_section()
- Date: Fri, 4 Sep 2015 05:59:37 +0000 (UTC)
commit 6c6860453d4435ece0f8dc46a800328fe901f8df
Author: Christian Hergert <christian hergert me>
Date: Thu Sep 3 19:27:25 2015 -0700
menu: add gb_menu_extension_new_for_section()
This constructor creates a new menu extension to be used on a section of
a GMenu.
src/util/gb-menu-extension.c | 51 ++++++++++++++++++++++++++++++++++++++++++
src/util/gb-menu-extension.h | 2 +
2 files changed, 53 insertions(+), 0 deletions(-)
---
diff --git a/src/util/gb-menu-extension.c b/src/util/gb-menu-extension.c
index d5806c4..b369ac9 100644
--- a/src/util/gb-menu-extension.c
+++ b/src/util/gb-menu-extension.c
@@ -127,6 +127,57 @@ gb_menu_extension_new (GMenu *menu)
return g_object_new (GB_TYPE_MENU_EXTENSION, "menu", menu, NULL);
}
+GbMenuExtension *
+gb_menu_extension_new_for_section (GMenu *menu,
+ const gchar *section)
+{
+ guint n_items;
+ guint i;
+
+ n_items = g_menu_model_get_n_items (G_MENU_MODEL (menu));
+
+ for (i = 0; i < n_items; i++)
+ {
+ g_autoptr(GMenuAttributeIter) iter = NULL;
+
+ iter = g_menu_model_iterate_item_attributes (G_MENU_MODEL (menu), i);
+
+ while (g_menu_attribute_iter_next (iter))
+ {
+ g_autoptr(GVariant) variant = NULL;
+ const gchar *name;
+ const gchar *key;
+
+ name = g_menu_attribute_iter_get_name (iter);
+ if (g_strcmp0 (name, "id") != 0)
+ continue;
+
+ variant = g_menu_attribute_iter_get_value (iter);
+ if (!g_variant_is_of_type (variant, G_VARIANT_TYPE_STRING))
+ continue;
+
+ key = g_variant_get_string (variant, NULL);
+ if (g_strcmp0 (key, section) == 0)
+ {
+ GMenuModel *section_menu;
+
+ section_menu = g_menu_model_get_item_link (G_MENU_MODEL (menu), i,
G_MENU_LINK_SECTION);
+
+ if (!G_IS_MENU (section_menu))
+ continue;
+
+ return g_object_new (GB_TYPE_MENU_EXTENSION, "menu", section_menu, NULL);
+ }
+ }
+ }
+
+ g_warning ("Failed to locate section \"%s\". "
+ "Ensure you have set the <attribute name=\"id\"> element.",
+ section);
+
+ return NULL;
+}
+
void
gb_menu_extension_append_menu_item (GbMenuExtension *menu,
GMenuItem *item)
diff --git a/src/util/gb-menu-extension.h b/src/util/gb-menu-extension.h
index 128e7ef..1bbc069 100644
--- a/src/util/gb-menu-extension.h
+++ b/src/util/gb-menu-extension.h
@@ -31,6 +31,8 @@ G_BEGIN_DECLS
G_DECLARE_FINAL_TYPE (GbMenuExtension, gb_menu_extension, GB, MENU_EXTENSION, GObject)
GbMenuExtension *gb_menu_extension_new (GMenu *menu);
+GbMenuExtension *gb_menu_extension_new_for_section (GMenu *menu,
+ const gchar *section);
void gb_menu_extension_append_menu_item (GbMenuExtension *menu,
GMenuItem *item);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]