[gconf] Support enum and flags types better



commit 6d6704ea4143a335808b08e921a419bd4125d296
Author: Matthias Clasen <mclasen redhat com>
Date:   Fri Nov 5 11:03:38 2010 -0400

    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.

 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 07ccbe8..adcccf2 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:



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]