diff options
author | Ted Gould <ted@gould.cx> | 2011-02-24 08:33:38 -0600 |
---|---|---|
committer | Ted Gould <ted@gould.cx> | 2011-02-24 08:33:38 -0600 |
commit | b57f5a8ba47155113d8352a6b15bd31209a9199b (patch) | |
tree | ea5c9c9a8c96c2a7a9fb259cd4d377db19a9fbde /libdbusmenu-glib/menuitem.c | |
parent | b2013de30bc003fb51a515cf232a5b67ca06e2e1 (diff) | |
parent | 10859b3dd0cf399aa02a5adf7f848bb2e61121e5 (diff) | |
download | libdbusmenu-b57f5a8ba47155113d8352a6b15bd31209a9199b.tar.gz libdbusmenu-b57f5a8ba47155113d8352a6b15bd31209a9199b.tar.bz2 libdbusmenu-b57f5a8ba47155113d8352a6b15bd31209a9199b.zip |
Allow sending only some properties based on what is requested.
Diffstat (limited to 'libdbusmenu-glib/menuitem.c')
-rw-r--r-- | libdbusmenu-glib/menuitem.c | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c index 26dad62..78e07df 100644 --- a/libdbusmenu-glib/menuitem.c +++ b/libdbusmenu-glib/menuitem.c @@ -1346,7 +1346,7 @@ dbusmenu_menuitem_properties_variant (DbusmenuMenuitem * mi, const gchar ** prop GVariant * final_variant = NULL; - if (g_hash_table_size(priv->properties) > 0) { + if ((properties == NULL || properties[0] == NULL) && g_hash_table_size(priv->properties) > 0) { GVariantBuilder builder; g_variant_builder_init(&builder, G_VARIANT_TYPE_ARRAY); @@ -1355,6 +1355,33 @@ dbusmenu_menuitem_properties_variant (DbusmenuMenuitem * mi, const gchar ** prop final_variant = g_variant_builder_end(&builder); } + if (properties != NULL) { + GVariantBuilder builder; + gboolean builder_init = FALSE; + int i = 0; const gchar * prop; + + for (prop = properties[i]; prop != NULL; prop = properties[++i]) { + GVariant * propvalue = dbusmenu_menuitem_property_get_variant(mi, prop); + + if (propvalue == NULL) { + continue; + } + + if (!builder_init) { + builder_init = TRUE; + g_variant_builder_init(&builder, G_VARIANT_TYPE_ARRAY); + } + + GVariant * dict = g_variant_new_dict_entry(g_variant_new_string((gchar *)prop), + g_variant_new_variant((GVariant *)propvalue)); + g_variant_builder_add_value(&builder, dict); + } + + if (builder_init) { + final_variant = g_variant_builder_end(&builder); + } + } + return final_variant; } |