aboutsummaryrefslogtreecommitdiff
path: root/libdbusmenu-gtk
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
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')
-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