aboutsummaryrefslogtreecommitdiff
path: root/libdbusmenu-glib/menuitem.c
diff options
context:
space:
mode:
authorTed Gould <ted@gould.cx>2010-04-14 23:47:01 -0500
committerTed Gould <ted@gould.cx>2010-04-14 23:47:01 -0500
commit5148e0fd0106c1012f19be45c4bf79b187ad4d96 (patch)
tree5bec8d7aa55efbe6fcacea7d5a17db1a26ceb7f4 /libdbusmenu-glib/menuitem.c
parent914b2a38181afb26ed2c8e1254c5bdb562f9e9df (diff)
downloadlibdbusmenu-5148e0fd0106c1012f19be45c4bf79b187ad4d96.tar.gz
libdbusmenu-5148e0fd0106c1012f19be45c4bf79b187ad4d96.tar.bz2
libdbusmenu-5148e0fd0106c1012f19be45c4bf79b187ad4d96.zip
Adding a function to only get the position in the children that are realized.
Diffstat (limited to 'libdbusmenu-glib/menuitem.c')
-rw-r--r--libdbusmenu-glib/menuitem.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c
index dac491b..220f7e5 100644
--- a/libdbusmenu-glib/menuitem.c
+++ b/libdbusmenu-glib/menuitem.c
@@ -560,6 +560,50 @@ dbusmenu_menuitem_get_position (DbusmenuMenuitem * mi, DbusmenuMenuitem * parent
}
/**
+ dbusmenu_menuitem_get_position_realized:
+ @mi: The #DbusmenuMenuitem to find the position of
+ @parent: The #DbusmenuMenuitem who's children contain @mi
+
+ This function is very similar to #dbusmenu_menuitem_get_position
+ except that it only counts in the children that have been realized.
+
+ Return value: The position of @mi in the realized children of @parent.
+*/
+guint
+dbusmenu_menuitem_get_position_realized (DbusmenuMenuitem * mi, DbusmenuMenuitem * parent)
+{
+ #ifdef MASSIVEDEBUGGING
+ if (!DBUSMENU_IS_MENUITEM(mi)) g_warning("Getting position of %d (%s), it's at: %d (mi fail)", ID(mi), LABEL(mi), 0);
+ if (!DBUSMENU_IS_MENUITEM(parent)) g_warning("Getting position of %d (%s), it's at: %d (parent fail)", ID(mi), LABEL(mi), 0);
+ #endif
+
+ /* TODO: I'm not too happy returning zeros here. But that's all I've got */
+ g_return_val_if_fail(DBUSMENU_IS_MENUITEM(mi), 0);
+ g_return_val_if_fail(DBUSMENU_IS_MENUITEM(parent), 0);
+
+ GList * childs = dbusmenu_menuitem_get_children(parent);
+ if (childs == NULL) return 0;
+ guint count = 0;
+ for ( ; childs != NULL; childs = childs->next, count++) {
+ if (!dbusmenu_menuitem_realized(DBUSMENU_MENUITEM(childs->data))) {
+ count--;
+ continue;
+ }
+ if (childs->data == mi) {
+ break;
+ }
+ }
+
+ if (childs == NULL) return 0;
+
+ #ifdef MASSIVEDEBUGGING
+ g_debug("Getting position of %d (%s), it's at: %d", ID(mi), LABEL(mi), count);
+ #endif
+
+ return count;
+}
+
+/**
dbusmenu_menuitem_child_append:
@mi: The #DbusmenuMenuitem which will become a new parent
@child: The #DbusmenMenuitem that will be a child