ayatana-commits team mailing list archive
-
ayatana-commits team
-
Mailing list archive
-
Message #01351
[Merge] lp:~ted/dbusmenu/menu-update-bug into lp:dbusmenu
Ted Gould has proposed merging lp:~ted/dbusmenu/menu-update-bug into lp:dbusmenu.
Requested reviews:
DBus Menu Team (dbusmenu-team)
Changes the parse function from using take_children to using
get_children and handling the fallout from that. This makes it so that
menus don't disappear.
--
https://code.launchpad.net/~ted/dbusmenu/menu-update-bug/+merge/22564
Your team ayatana-commits is subscribed to branch lp:dbusmenu.
=== modified file 'libdbusmenu-glib/client.c'
--- libdbusmenu-glib/client.c 2010-03-31 18:51:48 +0000
+++ libdbusmenu-glib/client.c 2010-03-31 20:05:28 +0000
@@ -779,7 +779,7 @@
xmlNodePtr children;
guint position;
- GList * oldchildren = dbusmenu_menuitem_take_children(item);
+ GList * oldchildren = g_list_copy(dbusmenu_menuitem_get_children(item));
/* g_debug("Starting old children: %d", g_list_length(oldchildren)); */
for (children = node->children, position = 0; children != NULL; children = children->next, position++) {
@@ -800,8 +800,16 @@
}
}
- childmi = parse_layout_xml(client, children, childmi, item, proxy);
- dbusmenu_menuitem_child_add_position(item, childmi, position);
+ DbusmenuMenuitem * newchildmi = parse_layout_xml(client, children, childmi, item, proxy);
+
+ if (newchildmi != childmi) {
+ if (childmi != NULL) {
+ dbusmenu_menuitem_child_delete(item, childmi);
+ }
+ dbusmenu_menuitem_child_add_position(item, newchildmi, position);
+ } else {
+ dbusmenu_menuitem_child_reorder(item, childmi, position);
+ }
}
/* g_debug("Stopping old children: %d", g_list_length(oldchildren)); */
@@ -811,7 +819,7 @@
#ifdef MASSIVEDEBUGGING
g_debug("Unref'ing menu item with layout update. ID: %d", dbusmenu_menuitem_get_id(oldmi));
#endif
- g_object_unref(G_OBJECT(oldmi));
+ dbusmenu_menuitem_child_delete(item, oldmi);
}
g_list_free(oldchildren);
Follow ups