Merge authors:
  Ted Gould (ted)
Related merge proposals:
  https://code.launchpad.net/~ted/dbusmenu/menu-update-bug/+merge/22564
  proposed by: Ted Gould (ted)
  review: Approve - Cody Russell (bratsche)
------------------------------------------------------------
revno: 92 [merge]
committer: Ted Gould <t...@gould.cx>
branch nick: trunk
timestamp: Wed 2010-03-31 17:13:25 -0500
message:
  Switching menu updating to be friendlier
modified:
  libdbusmenu-glib/client.c


--
lp:dbusmenu
https://code.launchpad.net/~dbusmenu-team/dbusmenu/trunk

Your team ayatana-commits is subscribed to branch lp:dbusmenu.
To unsubscribe from this branch go to 
https://code.launchpad.net/~dbusmenu-team/dbusmenu/trunk/+edit-subscription
=== modified file 'libdbusmenu-glib/client.c'
--- libdbusmenu-glib/client.c	2010-03-31 18:51:48 +0000
+++ libdbusmenu-glib/client.c	2010-03-31 19:47:29 +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);
 

_______________________________________________
Mailing list: https://launchpad.net/~ayatana-commits
Post to     : ayatana-commits@lists.launchpad.net
Unsubscribe : https://launchpad.net/~ayatana-commits
More help   : https://help.launchpad.net/ListHelp

Reply via email to