From 9ef52be8a4da1fc981e09079e142d2aea9793567 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 18 Nov 2010 13:49:27 -0600 Subject: Setting up the proper builders and interfaces for group_properties --- libdbusmenu-glib/server.c | 42 ++++++++++++++++++++++++++++++++---------- 1 file changed, 32 insertions(+), 10 deletions(-) (limited to 'libdbusmenu-glib/server.c') diff --git a/libdbusmenu-glib/server.c b/libdbusmenu-glib/server.c index fd507a2..b48b28a 100644 --- a/libdbusmenu-glib/server.c +++ b/libdbusmenu-glib/server.c @@ -851,25 +851,43 @@ bus_get_properties (DbusmenuServer * server, GVariant * params, GDBusMethodInvoc static void bus_get_group_properties (DbusmenuServer * server, GVariant * params, GDBusMethodInvocation * invocation) { + g_debug("Begin group prop: %s", g_variant_print(params, TRUE)); DbusmenuServerPrivate * priv = DBUSMENU_SERVER_GET_PRIVATE(server); GVariantIter ids; - g_variant_iter_init(&ids, params); + g_variant_iter_init(&ids, g_variant_get_child_value(params, 0)); GVariantBuilder builder; - g_variant_builder_init(&builder, G_VARIANT_TYPE("a(ia{sv})")); + g_variant_builder_init(&builder, G_VARIANT_TYPE_ARRAY); - guint id; + gint id; while (g_variant_iter_next(&ids, "i", &id)) { DbusmenuMenuitem * mi = dbusmenu_menuitem_find_id(priv->root, id); if (mi == NULL) continue; - g_variant_builder_add(&builder, "ia{sv}", id, dbusmenu_menuitem_properties_variant(mi)); + GVariantBuilder wbuilder; + g_variant_builder_init(&wbuilder, G_VARIANT_TYPE_TUPLE); + g_variant_builder_add(&wbuilder, "i", id); + GVariant * props = dbusmenu_menuitem_properties_variant(mi); + + if (props == NULL) { + props = g_variant_parse(g_variant_type_new("a{sv}"), "{}", NULL, NULL, NULL); + } + + g_variant_builder_add_value(&wbuilder, props); + GVariant * mi_data = g_variant_builder_end(&wbuilder); + + g_variant_builder_add_value(&builder, mi_data); } GVariant * ret = g_variant_builder_end(&builder); - g_dbus_method_invocation_return_value(invocation, ret); + g_variant_builder_init(&builder, G_VARIANT_TYPE_TUPLE); + g_variant_builder_add_value(&builder, ret); + GVariant * final = g_variant_builder_end(&builder); + g_dbus_method_invocation_return_value(invocation, final); + + g_debug("End group prop"); return; } @@ -907,13 +925,17 @@ bus_get_children (DbusmenuServer * server, GVariant * params, GDBusMethodInvocat return; } - GVariantBuilder * builder = g_variant_builder_new(G_VARIANT_TYPE("a(ia{sv})")); - GList * children = dbusmenu_menuitem_get_children(mi); - g_list_foreach(children, serialize_menuitem, builder); + GVariant * ret = NULL; + + if (children != NULL) { + GVariantBuilder builder; + g_variant_builder_init(&builder, G_VARIANT_TYPE_ARRAY); - GVariant * ret = g_variant_builder_end(builder); - g_variant_builder_unref(builder); + g_list_foreach(children, serialize_menuitem, &builder); + + ret = g_variant_builder_end(&builder); + } g_dbus_method_invocation_return_value(invocation, ret); return; -- cgit v1.2.3