From 4e93ea396591cb11d092278014f8a38987610699 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 8 Mar 2011 16:07:39 -0600 Subject: 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. --- libdbusmenu-gtk/parser.c | 21 +++++++++++++++------ 1 file 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 -- cgit v1.2.3