aboutsummaryrefslogtreecommitdiff
path: root/libdbusmenu-glib/server.c
diff options
context:
space:
mode:
authorTed Gould <ted@gould.cx>2011-01-18 10:32:29 -0600
committerTed Gould <ted@gould.cx>2011-01-18 10:32:29 -0600
commit31d28c2b7f818749973aa528fca53632a129f83d (patch)
tree427178bb09b68f264e8fef42874ee08972bf8015 /libdbusmenu-glib/server.c
parent499e96b9384305466173d986ddb9c53f8b01640b (diff)
downloadlibdbusmenu-31d28c2b7f818749973aa528fca53632a129f83d.tar.gz
libdbusmenu-31d28c2b7f818749973aa528fca53632a129f83d.tar.bz2
libdbusmenu-31d28c2b7f818749973aa528fca53632a129f83d.zip
Fixing builder to only init/finish if there are entries we get.
Diffstat (limited to 'libdbusmenu-glib/server.c')
-rw-r--r--libdbusmenu-glib/server.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/libdbusmenu-glib/server.c b/libdbusmenu-glib/server.c
index 100eb14..03886bb 100644
--- a/libdbusmenu-glib/server.c
+++ b/libdbusmenu-glib/server.c
@@ -894,13 +894,18 @@ bus_get_group_properties (DbusmenuServer * server, GVariant * params, GDBusMetho
g_variant_iter_init(&ids, g_variant_get_child_value(params, 0));
GVariantBuilder builder;
- g_variant_builder_init(&builder, G_VARIANT_TYPE_ARRAY);
+ gboolean builder_init = FALSE;
gint id;
while (g_variant_iter_next(&ids, "i", &id)) {
DbusmenuMenuitem * mi = dbusmenu_menuitem_find_id(priv->root, id);
if (mi == NULL) continue;
+ if (!builder_init) {
+ g_variant_builder_init(&builder, G_VARIANT_TYPE_ARRAY);
+ builder_init = TRUE;
+ }
+
GVariantBuilder wbuilder;
g_variant_builder_init(&wbuilder, G_VARIANT_TYPE_TUPLE);
g_variant_builder_add(&wbuilder, "i", id);
@@ -916,7 +921,13 @@ bus_get_group_properties (DbusmenuServer * server, GVariant * params, GDBusMetho
g_variant_builder_add_value(&builder, mi_data);
}
- GVariant * ret = g_variant_builder_end(&builder);
+ GVariant * ret = NULL;
+
+ if (builder_init) {
+ ret = g_variant_builder_end(&builder);
+ } else {
+ ret = g_variant_parse(g_variant_type_new("a(ia(sv))"), "[]", NULL, NULL, NULL);
+ }
g_variant_builder_init(&builder, G_VARIANT_TYPE_TUPLE);
g_variant_builder_add_value(&builder, ret);