diff options
author | Ted Gould <ted@gould.cx> | 2010-04-14 23:47:01 -0500 |
---|---|---|
committer | Ted Gould <ted@gould.cx> | 2010-04-14 23:47:01 -0500 |
commit | 5148e0fd0106c1012f19be45c4bf79b187ad4d96 (patch) | |
tree | 5bec8d7aa55efbe6fcacea7d5a17db1a26ceb7f4 /libdbusmenu-glib | |
parent | 914b2a38181afb26ed2c8e1254c5bdb562f9e9df (diff) | |
download | libdbusmenu-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')
-rw-r--r-- | libdbusmenu-glib/menuitem.c | 44 | ||||
-rw-r--r-- | libdbusmenu-glib/menuitem.h | 1 |
2 files changed, 45 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 diff --git a/libdbusmenu-glib/menuitem.h b/libdbusmenu-glib/menuitem.h index cb6b8f4..e5b5ae2 100644 --- a/libdbusmenu-glib/menuitem.h +++ b/libdbusmenu-glib/menuitem.h @@ -148,6 +148,7 @@ gint dbusmenu_menuitem_get_id (DbusmenuMenuitem * mi); GList * dbusmenu_menuitem_get_children (DbusmenuMenuitem * mi); GList * dbusmenu_menuitem_take_children (DbusmenuMenuitem * mi) G_GNUC_WARN_UNUSED_RESULT; guint dbusmenu_menuitem_get_position (DbusmenuMenuitem * mi, DbusmenuMenuitem * parent); +guint dbusmenu_menuitem_get_position_realized (DbusmenuMenuitem * mi, DbusmenuMenuitem * parent); gboolean dbusmenu_menuitem_child_append (DbusmenuMenuitem * mi, DbusmenuMenuitem * child); gboolean dbusmenu_menuitem_child_prepend (DbusmenuMenuitem * mi, DbusmenuMenuitem * child); |