]> spindle.queued.net Git - midori/commitdiff
Only write settings with values that differ from the defaults
authorChristian Dywan <christian@twotoasts.de>
Wed, 9 Dec 2009 19:34:54 +0000 (20:34 +0100)
committerChristian Dywan <christian@twotoasts.de>
Wed, 9 Dec 2009 19:58:15 +0000 (20:58 +0100)
midori/main.c

index 19f2e6e49a0b08b5c113d7e4ff0c2680410c0655..df5a16ded94dcefbbfd62adbefa552361c104597 100644 (file)
@@ -204,47 +204,52 @@ settings_save_to_file (MidoriWebSettings* settings,
         type = G_PARAM_SPEC_TYPE (pspec);
         property = g_param_spec_get_name (pspec);
         if (!(pspec->flags & G_PARAM_WRITABLE))
-        {
-            gchar* prop_comment = g_strdup_printf ("# %s", property);
-            g_key_file_set_string (key_file, "settings", prop_comment, "");
-            g_free (prop_comment);
             continue;
-        }
         if (type == G_TYPE_PARAM_STRING)
         {
             gchar* string;
+            const gchar* def_string = G_PARAM_SPEC_STRING (pspec)->default_value;
             g_object_get (settings, property, &string, NULL);
-            g_key_file_set_string (key_file, "settings", property,
-                                   string ? string : "");
+            if (!string)
+                string = g_strdup ("");
+            if (!def_string)
+                def_string = "";
+            if (strcmp (string, def_string))
+                g_key_file_set_string (key_file, "settings", property, string);
             g_free (string);
         }
         else if (type == G_TYPE_PARAM_INT)
         {
             gint integer;
             g_object_get (settings, property, &integer, NULL);
-            g_key_file_set_integer (key_file, "settings", property, integer);
+            if (integer != G_PARAM_SPEC_INT (pspec)->default_value)
+                g_key_file_set_integer (key_file, "settings", property, integer);
         }
         else if (type == G_TYPE_PARAM_FLOAT)
         {
             gfloat number;
             g_object_get (settings, property, &number, NULL);
-            g_key_file_set_double (key_file, "settings", property, number);
+            if (number != G_PARAM_SPEC_FLOAT (pspec)->default_value)
+                g_key_file_set_double (key_file, "settings", property, number);
         }
         else if (type == G_TYPE_PARAM_BOOLEAN)
         {
             gboolean truth;
             g_object_get (settings, property, &truth, NULL);
-            g_key_file_set_boolean (key_file, "settings", property, truth);
+            if (truth != G_PARAM_SPEC_BOOLEAN (pspec)->default_value)
+                g_key_file_set_boolean (key_file, "settings", property, truth);
         }
         else if (type == G_TYPE_PARAM_ENUM)
         {
             GEnumClass* enum_class = G_ENUM_CLASS (
                 g_type_class_ref (pspec->value_type));
             gint integer;
+            GEnumValue* enum_value;
             g_object_get (settings, property, &integer, NULL);
-            GEnumValue* enum_value = g_enum_get_value (enum_class, integer);
-            g_key_file_set_string (key_file, "settings", property,
-                                   enum_value->value_name);
+            enum_value = g_enum_get_value (enum_class, integer);
+            if (integer != G_PARAM_SPEC_ENUM (pspec)->default_value)
+                g_key_file_set_string (key_file, "settings", property,
+                                       enum_value->value_name);
         }
         else
             g_warning (_("Invalid configuration value '%s'"), property);