aboutsummaryrefslogtreecommitdiff
path: root/libdbusmenu-gtk/parser.c
diff options
context:
space:
mode:
authorMichael Terry <mike@mterry.name>2011-01-28 14:35:36 -0500
committerMichael Terry <mike@mterry.name>2011-01-28 14:35:36 -0500
commit7be86c5778e58bbe231655ed58b7597ad61f5310 (patch)
treee897000f2f33cbee796e530153c1403ab3f76f27 /libdbusmenu-gtk/parser.c
parent35265154f7d70dc31837ff8fe4e45a810c393c2b (diff)
downloadlibdbusmenu-7be86c5778e58bbe231655ed58b7597ad61f5310.tar.gz
libdbusmenu-7be86c5778e58bbe231655ed58b7597ad61f5310.tar.bz2
libdbusmenu-7be86c5778e58bbe231655ed58b7597ad61f5310.zip
notice new submenus
Diffstat (limited to 'libdbusmenu-gtk/parser.c')
-rw-r--r--libdbusmenu-gtk/parser.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/libdbusmenu-gtk/parser.c b/libdbusmenu-gtk/parser.c
index 5d71585..5f42ed5 100644
--- a/libdbusmenu-gtk/parser.c
+++ b/libdbusmenu-gtk/parser.c
@@ -649,6 +649,27 @@ 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_get_children (item);
+ while (children != NULL) {
+ dbusmenu_menuitem_child_delete (item, DBUSMENU_MENUITEM(children->data));
+ children = children->next;
+ }
+ }
+
+ /* Now parse new submenu. */
+ GtkWidget * menu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (widget));
+ RecurseContext recurse = {0};
+ recurse.toplevel = gtk_widget_get_toplevel(widget);
+ recurse.parent = item;
+ parse_menu_structure_helper(menu, &recurse);
+ }
}
static gboolean