aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libdbusmenu-glib/menuitem-private.h2
-rw-r--r--libdbusmenu-glib/menuitem.c6
-rw-r--r--libdbusmenu-glib/server.c4
3 files changed, 6 insertions, 6 deletions
diff --git a/libdbusmenu-glib/menuitem-private.h b/libdbusmenu-glib/menuitem-private.h
index caa1377..07704ca 100644
--- a/libdbusmenu-glib/menuitem-private.h
+++ b/libdbusmenu-glib/menuitem-private.h
@@ -33,7 +33,7 @@ License version 3 and version 2.1 along with this program. If not, see
G_BEGIN_DECLS
-GVariant * dbusmenu_menuitem_build_variant (DbusmenuMenuitem * mi, const gchar ** properties);
+GVariant * dbusmenu_menuitem_build_variant (DbusmenuMenuitem * mi, const gchar ** properties, gint recurse);
gboolean dbusmenu_menuitem_realized (DbusmenuMenuitem * mi);
void dbusmenu_menuitem_set_realized (DbusmenuMenuitem * mi);
GVariant * dbusmenu_menuitem_properties_variant (DbusmenuMenuitem * mi, const gchar ** properties);
diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c
index 309f435..6a33499 100644
--- a/libdbusmenu-glib/menuitem.c
+++ b/libdbusmenu-glib/menuitem.c
@@ -1333,7 +1333,7 @@ dbusmenu_menuitem_get_root (DbusmenuMenuitem * mi)
children to place their own tags in the array in between those two.
*/
GVariant *
-dbusmenu_menuitem_build_variant (DbusmenuMenuitem * mi, const gchar ** properties)
+dbusmenu_menuitem_build_variant (DbusmenuMenuitem * mi, const gchar ** properties, gint recurse)
{
g_return_val_if_fail(DBUSMENU_IS_MENUITEM(mi), NULL);
@@ -1360,14 +1360,14 @@ dbusmenu_menuitem_build_variant (DbusmenuMenuitem * mi, const gchar ** propertie
/* Pillage the children */
GList * children = dbusmenu_menuitem_get_children(mi);
- if (children == NULL) {
+ if (children == NULL && recurse != 0) {
g_variant_builder_add_value(&tupleb, g_variant_parse(G_VARIANT_TYPE("a(v)"), "[ ]", NULL, NULL, NULL));
} else {
GVariantBuilder childrenbuilder;
g_variant_builder_init(&childrenbuilder, G_VARIANT_TYPE_ARRAY);
for ( ; children != NULL; children = children->next) {
- GVariant * child = dbusmenu_menuitem_build_variant(DBUSMENU_MENUITEM(children->data), properties);
+ GVariant * child = dbusmenu_menuitem_build_variant(DBUSMENU_MENUITEM(children->data), properties, recurse - 1);
g_variant_builder_add_value(&childrenbuilder, g_variant_new_variant(child));
}
diff --git a/libdbusmenu-glib/server.c b/libdbusmenu-glib/server.c
index 3e71f07..26e324e 100644
--- a/libdbusmenu-glib/server.c
+++ b/libdbusmenu-glib/server.c
@@ -938,7 +938,7 @@ bus_get_layout (DbusmenuServer * server, GVariant * params, GDBusMethodInvocatio
/* Input */
gint parent = g_variant_get_int32(g_variant_get_child_value(params, 0));
- //gint recurse = g_variant_get_int32(g_variant_get_child_value(params, 1));
+ gint recurse = g_variant_get_int32(g_variant_get_child_value(params, 1));
const gchar ** props = g_variant_get_strv(g_variant_get_child_value(params, 2), NULL);
/* Output */
@@ -946,7 +946,7 @@ bus_get_layout (DbusmenuServer * server, GVariant * params, GDBusMethodInvocatio
GVariant * items = NULL;
if (priv->root != NULL) {
- items = dbusmenu_menuitem_build_variant(priv->root, props);
+ items = dbusmenu_menuitem_build_variant(priv->root, props, recurse);
}
/* What happens if we don't have anything? */