diff options
author | Ken VanDine <ken.vandine@canonical.com> | 2011-01-31 17:30:46 -0500 |
---|---|---|
committer | Ken VanDine <ken.vandine@canonical.com> | 2011-01-31 17:30:46 -0500 |
commit | 109c9dea8cb6924d53eec79d7ce9eb4c9736bc0d (patch) | |
tree | f19bffa21b5d81d7ed3c369a65efbe603509e7a6 /libdbusmenu-gtk/parser.c | |
parent | e08b0e33060a39b3c95e43531825a95f5d415af8 (diff) | |
parent | ff4cd6cd6a3eb7de96101a02e84545059b9c71be (diff) | |
download | libdbusmenu-109c9dea8cb6924d53eec79d7ce9eb4c9736bc0d.tar.gz libdbusmenu-109c9dea8cb6924d53eec79d7ce9eb4c9736bc0d.tar.bz2 libdbusmenu-109c9dea8cb6924d53eec79d7ce9eb4c9736bc0d.zip |
releasing version 0.3.95-0ubuntu1
Diffstat (limited to 'libdbusmenu-gtk/parser.c')
-rw-r--r-- | libdbusmenu-gtk/parser.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/libdbusmenu-gtk/parser.c b/libdbusmenu-gtk/parser.c index 5d71585..7e5e7e1 100644 --- a/libdbusmenu-gtk/parser.c +++ b/libdbusmenu-gtk/parser.c @@ -649,6 +649,37 @@ widget_notify_cb (GtkWidget *widget, } } } + else if (pspec->name == g_intern_static_string ("submenu")) + { + /* The underlying submenu got swapped out. Let's see what it is now. */ + /* First, delete any children that may exist currently. */ + DbusmenuMenuitem * item = DBUSMENU_MENUITEM(g_object_get_data(G_OBJECT(widget), CACHED_MENUITEM)); + if (item != NULL) + { + GList * children = dbusmenu_menuitem_take_children (item); + GList * child = children; + while (child != NULL) { + g_object_unref (G_OBJECT(child->data)); + child = child->next; + } + g_list_free(children); + } + + /* Now parse new submenu. */ + RecurseContext recurse = {0}; + recurse.toplevel = gtk_widget_get_toplevel(widget); + recurse.parent = item; + + if (item != NULL) { + GtkWidget * menu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (widget)); + parse_menu_structure_helper(menu, &recurse); + } else { + /* Note: it would be really odd that we wouldn't have a cached + item, but we should handle that appropriately. */ + parse_menu_structure_helper(widget, &recurse); + g_object_unref(G_OBJECT(recurse.parent)); + } + } } static gboolean |