aboutsummaryrefslogtreecommitdiff
path: root/libdbusmenu-gtk/parser.c
diff options
context:
space:
mode:
authorTed Gould <ted@gould.cx>2011-03-08 16:07:39 -0600
committerTed Gould <ted@gould.cx>2011-03-08 16:07:39 -0600
commit4e93ea396591cb11d092278014f8a38987610699 (patch)
tree56f4e49e81ec8baa386d89252e3b86a64c9e0264 /libdbusmenu-gtk/parser.c
parentd108784a9b3b326e17bf1598123a9bf8f6a6c22b (diff)
downloadlibdbusmenu-4e93ea396591cb11d092278014f8a38987610699.tar.gz
libdbusmenu-4e93ea396591cb11d092278014f8a38987610699.tar.bz2
libdbusmenu-4e93ea396591cb11d092278014f8a38987610699.zip
If we call the parse function and we already have the menu item built for the passed in value let's just use that and not bother looking any further.
Diffstat (limited to 'libdbusmenu-gtk/parser.c')
-rw-r--r--libdbusmenu-gtk/parser.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/libdbusmenu-gtk/parser.c b/libdbusmenu-gtk/parser.c
index b1fc9d9..0634047 100644
--- a/libdbusmenu-gtk/parser.c
+++ b/libdbusmenu-gtk/parser.c
@@ -101,15 +101,25 @@ static void menuitem_notify_cb (GtkWidget * widget,
DbusmenuMenuitem *
dbusmenu_gtk_parse_menu_structure (GtkWidget * widget)
{
- g_return_val_if_fail(GTK_IS_MENU_ITEM(widget) || GTK_IS_MENU_SHELL(widget), NULL);
+ g_return_val_if_fail(GTK_IS_MENU_ITEM(widget) || GTK_IS_MENU_SHELL(widget), NULL);
- RecurseContext recurse = {0};
+ DbusmenuMenuitem * returnval = NULL;
+ gpointer data = g_object_get_data(G_OBJECT(widget), CACHED_MENUITEM);
- recurse.toplevel = gtk_widget_get_toplevel(widget);
+ if (data == NULL) {
+ RecurseContext recurse = {0};
- parse_menu_structure_helper(widget, &recurse);
+ recurse.toplevel = gtk_widget_get_toplevel(widget);
- return recurse.parent;
+ parse_menu_structure_helper(widget, &recurse);
+
+ returnval = recurse.parent;
+ } else {
+ returnval = DBUSMENU_MENUITEM(data);
+ g_object_ref(G_OBJECT(returnval));
+ }
+
+ return returnval;
}
static void
@@ -231,7 +241,6 @@ new_menuitem (GtkWidget * widget)
static void
parse_menu_structure_helper (GtkWidget * widget, RecurseContext * recurse)
{
-
/* If this is a shell, then let's handle the items in it. */
if (GTK_IS_MENU_SHELL (widget)) {
/* Okay, this is a little janky and all.. but some applications update some