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 /libdbusmenu-gtk | |
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.
Diffstat (limited to 'libdbusmenu-gtk')
-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 |