diff options
author | Ted Gould <ted@canonical.com> | 2009-05-12 15:54:08 -0500 |
---|---|---|
committer | Ted Gould <ted@canonical.com> | 2009-05-12 15:54:08 -0500 |
commit | 69228957b49867644ecc5351d5dc1e0f0458fc95 (patch) | |
tree | 1d20836b60042207a445d383656b157e728403ae /libdbusmenu-glib | |
parent | 6df050a764d4319b84d86ee42ec3e3bf850e1e5f (diff) | |
download | libdbusmenu-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.c | 32 | ||||
-rw-r--r-- | libdbusmenu-glib/menuitem.h | 1 |
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 |