GMenu: add g_menu_remove_all() API
authorRyan Lortie <desrt@desrt.ca>
Mon, 8 Apr 2013 19:27:16 +0000 (15:27 -0400)
committerRyan Lortie <desrt@desrt.ca>
Fri, 19 Apr 2013 18:52:51 +0000 (14:52 -0400)
Removes all of the items from a GMenu.  The keyboard indicator wants to
do this as part of refreshing the layout list, as an example.

https://bugzilla.gnome.org/show_bug.cgi?id=697601

docs/reference/gio/gio-sections.txt
gio/gmenu.c
gio/gmenu.h

index ca8cbf2..683b66b 100644 (file)
@@ -3773,6 +3773,7 @@ g_menu_prepend_submenu
 
 <SUBSECTION>
 g_menu_remove
+g_menu_remove_all
 
 <SUBSECTION>
 GMenuItem
index 1fa132f..940ba66 100644 (file)
@@ -486,6 +486,29 @@ g_menu_remove (GMenu *menu,
   g_menu_model_items_changed (G_MENU_MODEL (menu), position, 1, 0);
 }
 
+/**
+ * g_menu_remove_all:
+ * @menu: a #GMenu
+ *
+ * Removes all items in the menu.
+ *
+ * Since: 2.38
+ **/
+void
+g_menu_remove_all (GMenu *menu)
+{
+  gint i, n;
+
+  g_return_if_fail (G_IS_MENU (menu));
+  n = menu->items->len;
+
+  for (i = 0; i < n; i++)
+    g_menu_clear_item (&g_array_index (menu->items, struct item, i));
+  g_array_set_size (menu->items, 0);
+
+  g_menu_model_items_changed (G_MENU_MODEL (menu), 0, n, 0);
+}
+
 static void
 g_menu_finalize (GObject *object)
 {
index 729915d..e68cf83 100644 (file)
@@ -63,6 +63,9 @@ GLIB_AVAILABLE_IN_2_32
 void        g_menu_remove                           (GMenu       *menu,
                                                      gint         position);
 
+GLIB_AVAILABLE_IN_2_38
+void        g_menu_remove_all                       (GMenu       *menu);
+
 GLIB_AVAILABLE_IN_2_32
 void        g_menu_insert                           (GMenu       *menu,
                                                      gint         position,