diff options
author | Matthias Clasen <mclasen@redhat.com> | 2010-11-05 11:03:38 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2010-11-05 11:03:38 -0400 |
commit | 6d6704ea4143a335808b08e921a419bd4125d296 (patch) | |
tree | a5a4fbd7d37d8056c4bc9738bb2643e0b2e7f4b7 | |
parent | fdea70db1a27c85484dafb48f1fff22392a77a73 (diff) | |
download | gconf-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.c | 19 |
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: |