diff options
author | Ken VanDine <ken.vandine@canonical.com> | 2010-08-19 15:37:46 -0400 |
---|---|---|
committer | Ken VanDine <ken.vandine@canonical.com> | 2010-08-19 15:37:46 -0400 |
commit | 394c8bdc7cb0ac98861a76ad51fe641de456f6ef (patch) | |
tree | ea08c02fff05aba7c1d94ade8f7cc5a4131ddf95 /libdbusmenu-glib | |
parent | 89f235bd0727331327603ee98cdd4febc14e5972 (diff) | |
parent | 65e8b999069536a87428abbae7f17ce9e63422a8 (diff) | |
download | libdbusmenu-394c8bdc7cb0ac98861a76ad51fe641de456f6ef.tar.gz libdbusmenu-394c8bdc7cb0ac98861a76ad51fe641de456f6ef.tar.bz2 libdbusmenu-394c8bdc7cb0ac98861a76ad51fe641de456f6ef.zip |
* New upstream release.
* Fix to handle whitespace in layout XML better
* Fixes to test scripts on ARM
Diffstat (limited to 'libdbusmenu-glib')
-rw-r--r-- | libdbusmenu-glib/client.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/libdbusmenu-glib/client.c b/libdbusmenu-glib/client.c index 7c73b7b..73a7aac 100644 --- a/libdbusmenu-glib/client.c +++ b/libdbusmenu-glib/client.c @@ -1126,6 +1126,9 @@ parse_layout_xml(DbusmenuClient * client, xmlNodePtr node, DbusmenuMenuitem * it /* g_debug("Looking at child: %d", position); */ gint childid = parse_node_get_id(children); if (childid < 0) { + /* Don't increment the position when there isn't a valid + node in the XML tree. It's probably a comment. */ + position--; continue; } DbusmenuMenuitem * childmi = NULL; @@ -1143,11 +1146,17 @@ parse_layout_xml(DbusmenuClient * client, xmlNodePtr node, DbusmenuMenuitem * it } if (childmi == NULL) { + #ifdef MASSIVEDEBUGGING + g_debug("Building new menu item %d at position %d", childid, position); + #endif /* If we can't recycle, then we build a new one */ childmi = parse_layout_new_child(childid, client, item); dbusmenu_menuitem_child_add_position(item, childmi, position); g_object_unref(childmi); } else { + #ifdef MASSIVEDEBUGGING + g_debug("Recycling menu item %d at position %d", childid, position); + #endif /* If we can recycle, make sure it's in the right place */ dbusmenu_menuitem_child_reorder(item, childmi, position); parse_layout_update(childmi, client); @@ -1175,6 +1184,19 @@ parse_layout_xml(DbusmenuClient * client, xmlNodePtr node, DbusmenuMenuitem * it children = node->children; GList * childmis = dbusmenu_menuitem_get_children(item); while (children != NULL && childmis != NULL) { + gint xmlid = parse_node_get_id(children); + /* If this isn't a valid menu item we need to move on + until we have one. This avoids things like comments. */ + if (xmlid < 0) { + children = children->next; + continue; + } + + #ifdef MASSIVEDEBUGGING + gint miid = dbusmenu_menuitem_get_id(DBUSMENU_MENUITEM(childmis->data)); + g_debug("Recursing parse_layout_xml. XML ID: %d MI ID: %d", xmlid, miid); + #endif + parse_layout_xml(client, children, DBUSMENU_MENUITEM(childmis->data), item, proxy); children = children->next; |