summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2010-11-05 11:03:38 -0400
committerMatthias Clasen <mclasen@redhat.com>2010-11-05 11:03:38 -0400
commit6d6704ea4143a335808b08e921a419bd4125d296 (patch)
treea5a4fbd7d37d8056c4bc9738bb2643e0b2e7f4b7
parentfdea70db1a27c85484dafb48f1fff22392a77a73 (diff)
downloadgconf-6d6704ea4143a335808b08e921a419bd4125d296.tar.gz
Support enum and flags types better
When we find an integer in GConf, and the gsettings key has an enum or flags type, try to do the right thing.
-rw-r--r--gsettings/gsettings-data-convert.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/gsettings/gsettings-data-convert.c b/gsettings/gsettings-data-convert.c
index 07ccbe8a..adcccf27 100644
--- a/gsettings/gsettings-data-convert.c
+++ b/gsettings/gsettings-data-convert.c
@@ -155,8 +155,23 @@ handle_file (const gchar *filename)
g_print ("set key '%s' to integer '%d'\n",
keys[j], gconf_value_get_int (value));
else
- g_settings_set (settings, keys[j], "i",
- gconf_value_get_int (value));
+ {
+ GVariant *range;
+ gchar *type;
+
+ range = g_settings_get_range (settings, keys[j]);
+ g_variant_get (range, "(&sv)", &type, NULL);
+
+ if (strcmp (type, "enum") == 0)
+ g_settings_set_enum (settings, keys[j], gconf_value_get_int (value));
+ else if (strcmp (type, "flags") == 0)
+ g_settings_set_flags (settings, keys[j], gconf_value_get_int (value));
+ else
+ g_settings_set (settings, keys[j], "i",
+ gconf_value_get_int (value));
+
+ g_variant_unref (range);
+ }
break;
case GCONF_VALUE_BOOL: