aboutsummaryrefslogtreecommitdiff
path: root/libdbusmenu-glib
diff options
context:
space:
mode:
authorTed Gould <ted@canonical.com>2009-05-12 15:54:08 -0500
committerTed Gould <ted@canonical.com>2009-05-12 15:54:08 -0500
commit69228957b49867644ecc5351d5dc1e0f0458fc95 (patch)
tree1d20836b60042207a445d383656b157e728403ae /libdbusmenu-glib
parent6df050a764d4319b84d86ee42ec3e3bf850e1e5f (diff)
downloadlibdbusmenu-69228957b49867644ecc5351d5dc1e0f0458fc95.tar.gz
libdbusmenu-69228957b49867644ecc5351d5dc1e0f0458fc95.tar.bz2
libdbusmenu-69228957b49867644ecc5351d5dc1e0f0458fc95.zip
Adding in a foreach function for menuitems.
Diffstat (limited to 'libdbusmenu-glib')
-rw-r--r--libdbusmenu-glib/menuitem.c32
-rw-r--r--libdbusmenu-glib/menuitem.h1
2 files changed, 33 insertions, 0 deletions
diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c
index 99cae09..2d50bc6 100644
--- a/libdbusmenu-glib/menuitem.c
+++ b/libdbusmenu-glib/menuitem.c
@@ -523,3 +523,35 @@ dbusmenu_menuitem_buildxml (DbusmenuMenuitem * mi, GPtrArray * array)
return;
}
+typedef struct {
+ void (*func) (DbusmenuMenuitem * mi, gpointer data);
+ gpointer data;
+} foreach_struct_t;
+
+static void
+foreach_helper (gpointer data, gpointer user_data)
+{
+ dbusmenu_menuitem_foreach(DBUSMENU_MENUITEM(data), ((foreach_struct_t *)user_data)->func, ((foreach_struct_t *)user_data)->data);
+ return;
+}
+
+/**
+ dbusmenu_menuitem_foreach:
+ @mi: The #DbusmenItem to start from
+ @func: Function to call on every node in the tree
+ @data: User data to pass to the function
+
+ This calls the function @func on this menu item and all
+ of the children of this item. And their children. And
+ their children. And... you get the point. It will get
+ called on the whole tree.
+*/
+void
+dbusmenu_menuitem_foreach (DbusmenuMenuitem * mi, void (*func) (DbusmenuMenuitem * mi, gpointer data), gpointer data)
+{
+ func(mi, data);
+ GList * children = dbusmenu_menuitem_get_children(mi);
+ foreach_struct_t foreach_data = {func: func, data: data};
+ g_list_foreach(children, foreach_helper, &foreach_data);
+ return;
+}
diff --git a/libdbusmenu-glib/menuitem.h b/libdbusmenu-glib/menuitem.h
index 59af4a8..5b71ea6 100644
--- a/libdbusmenu-glib/menuitem.h
+++ b/libdbusmenu-glib/menuitem.h
@@ -110,6 +110,7 @@ const gchar * dbusmenu_menuitem_property_get (DbusmenuMenuitem * mi, const gchar
gboolean dbusmenu_menuitem_property_exist (DbusmenuMenuitem * mi, const gchar * property);
void dbusmenu_menuitem_buildxml (DbusmenuMenuitem * mi, GPtrArray * array);
+void dbusmenu_menuitem_foreach (DbusmenuMenuitem * mi, void (*func) (DbusmenuMenuitem * mi, gpointer data), gpointer data);
/**
SECTION:menuitem