diff options
author | Viktor Odintsev <ninetls@xfce.org> | 2017-08-17 03:35:48 +0300 |
---|---|---|
committer | Ali Abdallah <ali@xfce.org> | 2017-08-31 13:41:18 +0200 |
commit | c8215a9074805ddb4a0ba384283e33a573da90f9 (patch) | |
tree | f64eed51fef84705128878c43cb49be82a8d879a /common | |
parent | 25088094efdba26c777d49a2bcdde98105112525 (diff) | |
download | xfconf-c8215a9074805ddb4a0ba384283e33a573da90f9.tar.gz |
Allow to store empty arrays
Signed-off-by: Ali Abdallah <ali@xfce.org>
Diffstat (limited to 'common')
-rw-r--r-- | common/xfconf-gvaluefuncs.c | 36 |
1 files changed, 21 insertions, 15 deletions
diff --git a/common/xfconf-gvaluefuncs.c b/common/xfconf-gvaluefuncs.c index f2bcae8..38a012b 100644 --- a/common/xfconf-gvaluefuncs.c +++ b/common/xfconf-gvaluefuncs.c @@ -473,28 +473,34 @@ xfconf_gvalue_to_gvariant (const GValue *value) if (G_VALUE_TYPE(value) == G_TYPE_PTR_ARRAY) { GPtrArray *arr; - GVariantBuilder builder; - guint i = 0; - - g_variant_builder_init (&builder, G_VARIANT_TYPE_ARRAY); arr = (GPtrArray*)g_value_get_boxed (value); - /* Check for array and that the array has at least one element */ - g_return_val_if_fail (arr && arr->len != 0, NULL); + /* Check for array */ + g_return_val_if_fail (arr, NULL); - for (i=0; i < arr->len; ++i) { - GValue *v = g_ptr_array_index (arr, i); - GVariant *var = NULL; + if (arr->len == 0) { + variant = g_variant_ref_sink(g_variant_new ("av", NULL)); + } + else { + GVariantBuilder builder; + guint i = 0; - var = xfconf_basic_gvalue_to_gvariant (v); - if (var) { - g_variant_builder_add (&builder, "v", var, NULL); - g_variant_unref (var); + g_variant_builder_init (&builder, G_VARIANT_TYPE_ARRAY); + + for (i=0; i < arr->len; ++i) { + GValue *v = g_ptr_array_index (arr, i); + GVariant *var = NULL; + + var = xfconf_basic_gvalue_to_gvariant (v); + if (var) { + g_variant_builder_add (&builder, "v", var, NULL); + g_variant_unref (var); + } } - } - variant = g_variant_ref_sink(g_variant_builder_end (&builder)); + variant = g_variant_ref_sink(g_variant_builder_end (&builder)); + } } else if (G_VALUE_TYPE(value) == G_TYPE_STRV) { gchar **strlist; |