diff options
author | Ted Gould <ted@gould.cx> | 2011-03-08 16:07:39 -0600 |
---|---|---|
committer | Ted Gould <ted@gould.cx> | 2011-03-08 16:07:39 -0600 |
commit | 4e93ea396591cb11d092278014f8a38987610699 (patch) | |
tree | 56f4e49e81ec8baa386d89252e3b86a64c9e0264 | |
parent | d108784a9b3b326e17bf1598123a9bf8f6a6c22b (diff) | |
download | libdbusmenu-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.
-rw-r--r-- | libdbusmenu-gtk/parser.c | 21 |
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 |