From 29457ef539de25ce80f8bdb1d6ca0796fc5f1122 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 11 May 2009 12:46:30 -0500 Subject: Taking the children, and trying to reuse them if possible. Sometimes that doesn't work out and we have to put one down. It's always sad to loose one, but sometimes it has to happen. --- libdbusmenu-glib/client.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/libdbusmenu-glib/client.c b/libdbusmenu-glib/client.c index c432f7d..1a35868 100644 --- a/libdbusmenu-glib/client.c +++ b/libdbusmenu-glib/client.c @@ -311,14 +311,34 @@ parse_layout_xml(xmlNodePtr node, DbusmenuMenuitem * item, DbusmenuMenuitem * pa xmlNodePtr children; guint position; + GList * oldchildren = dbusmenu_menuitem_take_children(item); + for (children = node->children, position = 0; children != NULL; children = children->next, position++) { g_debug("Looking at child: %d", position); guint childid = parse_node_get_id(children); - DbusmenuMenuitem * childmi = dbusmenu_menuitem_child_find(item, childid); + DbusmenuMenuitem * childmi = NULL; + + GList * childsearch = NULL; + for (childsearch = oldchildren; childsearch != NULL; childsearch = g_list_next(childsearch)) { + DbusmenuMenuitem * cs_mi = DBUSMENU_MENUITEM(childsearch->data); + if (childid == dbusmenu_menuitem_get_id(cs_mi)) { + oldchildren = g_list_remove(oldchildren, cs_mi); + childmi = cs_mi; + break; + } + } + childmi = parse_layout_xml(children, childmi, item); dbusmenu_menuitem_child_add_position(item, childmi, position); } + GList * oldchildleft = NULL; + for (oldchildleft = oldchildren; oldchildleft != NULL; oldchildleft = g_list_next(oldchildleft)) { + DbusmenuMenuitem * oldmi = DBUSMENU_MENUITEM(oldchildleft->data); + g_object_unref(G_OBJECT(oldmi)); + } + g_list_free(oldchildren); + return item; } -- cgit v1.2.3