[Xfce4-commits] <midori:master> Move settings loading/ saving into WebSettings

Christian Dywan noreply at xfce.org
Sun Nov 25 12:06:01 CET 2012


Updating branch refs/heads/master
         to a1517f23d6f8f2457ce637ca96089311017f3c14 (commit)
       from 50068b40ee93c480ed3fa8b7b4b66ab896fcf692 (commit)

commit a1517f23d6f8f2457ce637ca96089311017f3c14
Author: Christian Dywan <christian at twotoasts.de>
Date:   Fri Nov 23 21:44:23 2012 +0100

    Move settings loading/ saving into WebSettings

 midori/main.c               |  248 +------------------------------------------
 midori/midori-websettings.c |  238 +++++++++++++++++++++++++++++++++++++++++
 midori/midori-websettings.h |   11 ++-
 3 files changed, 252 insertions(+), 245 deletions(-)

diff --git a/midori/main.c b/midori/main.c
index 385dca2..54f236b 100644
--- a/midori/main.c
+++ b/midori/main.c
@@ -53,241 +53,6 @@
     #include <gdk/gdkx.h>
 #endif
 
-static MidoriWebSettings*
-settings_and_accels_new (gchar*** extensions)
-{
-    MidoriWebSettings* settings = midori_web_settings_new ();
-    gchar* config_file = midori_paths_get_config_filename_for_reading ("config");
-    GKeyFile* key_file = g_key_file_new ();
-    GError* error = NULL;
-    GObjectClass* class;
-    guint i, n_properties;
-    GParamSpec** pspecs;
-    GParamSpec* pspec;
-    GType type;
-    const gchar* property;
-    gchar* str;
-    gint integer;
-    gfloat number;
-    gboolean boolean;
-
-    if (!g_key_file_load_from_file (key_file, config_file,
-                                    G_KEY_FILE_KEEP_COMMENTS, &error))
-    {
-        if (error->code == G_FILE_ERROR_NOENT)
-        {
-            GError* inner_error = NULL;
-            katze_assign (config_file, midori_paths_get_preset_filename (NULL, "config"));
-            g_key_file_load_from_file (key_file, config_file,
-                                       G_KEY_FILE_KEEP_COMMENTS, &inner_error);
-            if (inner_error != NULL)
-            {
-                printf (_("The configuration couldn't be loaded: %s\n"),
-                        inner_error->message);
-                g_error_free (inner_error);
-            }
-        }
-        else
-            printf (_("The configuration couldn't be loaded: %s\n"),
-                    error->message);
-        g_error_free (error);
-    }
-    class = G_OBJECT_GET_CLASS (settings);
-    pspecs = g_object_class_list_properties (class, &n_properties);
-    for (i = 0; i < n_properties; i++)
-    {
-        pspec = pspecs[i];
-        if (!(pspec->flags & G_PARAM_WRITABLE))
-            continue;
-
-        type = G_PARAM_SPEC_TYPE (pspec);
-        property = g_param_spec_get_name (pspec);
-        if (!g_key_file_has_key (key_file, "settings", property, NULL))
-            continue;
-
-        if (type == G_TYPE_PARAM_STRING)
-        {
-            str = g_key_file_get_string (key_file, "settings", property, NULL);
-            g_object_set (settings, property, str, NULL);
-            g_free (str);
-        }
-        else if (type == G_TYPE_PARAM_INT)
-        {
-            integer = g_key_file_get_integer (key_file, "settings", property, NULL);
-            g_object_set (settings, property, integer, NULL);
-        }
-        else if (type == G_TYPE_PARAM_FLOAT)
-        {
-            number = g_key_file_get_double (key_file, "settings", property, NULL);
-            g_object_set (settings, property, number, NULL);
-        }
-        else if (type == G_TYPE_PARAM_BOOLEAN)
-        {
-            boolean = g_key_file_get_boolean (key_file, "settings", property, NULL);
-            g_object_set (settings, property, boolean, NULL);
-        }
-        else if (type == G_TYPE_PARAM_ENUM)
-        {
-            GEnumClass* enum_class = G_ENUM_CLASS (
-                g_type_class_peek (pspec->value_type));
-            GEnumValue* enum_value;
-            str = g_key_file_get_string (key_file, "settings", property, NULL);
-            enum_value = g_enum_get_value_by_name (enum_class, str);
-            if (enum_value)
-                g_object_set (settings, property, enum_value->value, NULL);
-            else
-                g_warning (_("Value '%s' is invalid for %s"),
-                           str, property);
-            g_free (str);
-        }
-        else
-            g_warning (_("Invalid configuration value '%s'"), property);
-    }
-    g_free (pspecs);
-
-    *extensions = g_key_file_get_keys (key_file, "extensions", NULL, NULL);
-
-    g_key_file_free (key_file);
-
-    /* Load accelerators */
-    katze_assign (config_file, midori_paths_get_config_filename_for_reading ("accels"));
-    if (g_access (config_file, F_OK) != 0)
-        katze_assign (config_file, midori_paths_get_preset_filename (NULL, "accels"));
-    gtk_accel_map_load (config_file);
-    g_free (config_file);
-
-    return settings;
-}
-
-static gboolean
-settings_save_to_file (MidoriWebSettings* settings,
-                       MidoriApp*         app,
-                       const gchar*       filename,
-                       GError**           error)
-{
-    GKeyFile* key_file;
-    GObjectClass* class;
-    guint i, n_properties;
-    GParamSpec** pspecs;
-    GParamSpec* pspec;
-    GType type;
-    const gchar* property;
-    gboolean saved;
-    KatzeArray* extensions = katze_object_get_object (app, "extensions");
-    MidoriExtension* extension;
-    gchar** _extensions;
-
-    key_file = g_key_file_new ();
-    class = G_OBJECT_GET_CLASS (settings);
-    pspecs = g_object_class_list_properties (class, &n_properties);
-    for (i = 0; i < n_properties; i++)
-    {
-        pspec = pspecs[i];
-        type = G_PARAM_SPEC_TYPE (pspec);
-        property = g_param_spec_get_name (pspec);
-        if (!(pspec->flags & G_PARAM_WRITABLE))
-            continue;
-        if (type == G_TYPE_PARAM_STRING)
-        {
-            gchar* string;
-            const gchar* def_string = G_PARAM_SPEC_STRING (pspec)->default_value;
-            if (!strcmp (property, "user-stylesheet-uri"))
-            {
-                const gchar* user_stylesheet_uri = g_object_get_data (G_OBJECT (settings), property);
-                if (user_stylesheet_uri)
-                {
-                    g_key_file_set_string (key_file, "settings", property,
-                        user_stylesheet_uri);
-                }
-                else
-                    g_key_file_remove_key (key_file, "settings", property, NULL);
-                continue;
-            }
-
-            g_object_get (settings, property, &string, NULL);
-            if (!def_string)
-                def_string = "";
-            if (strcmp (string ? string : "", def_string))
-                g_key_file_set_string (key_file, "settings", property, string ? string : "");
-            g_free (string);
-        }
-        else if (type == G_TYPE_PARAM_INT)
-        {
-            gint integer;
-            g_object_get (settings, property, &integer, NULL);
-            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);
-            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);
-            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_peek (pspec->value_type));
-            gint integer;
-            GEnumValue* enum_value;
-            g_object_get (settings, property, &integer, NULL);
-            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);
-    }
-    g_free (pspecs);
-
-    /* Take frozen list of active extensions until preferences reset it */
-    if ((_extensions = g_object_get_data (G_OBJECT (app), "extensions")))
-    {
-        i = 0;
-        while (_extensions[i])
-        {
-            g_key_file_set_boolean (key_file, "extensions", _extensions[i], TRUE);
-            i++;
-        }
-    }
-    else if (extensions)
-    {
-        KATZE_ARRAY_FOREACH_ITEM (extension, extensions)
-            if (midori_extension_is_active (extension))
-            {
-                const gchar* filename = g_object_get_data (
-                    G_OBJECT (extension), "filename");
-
-                gchar* key;
-                gchar* term;
-
-                key = katze_object_get_string (extension, "key");
-                if (key && *key)
-                    term = g_strdup_printf ("%s/%s", filename, key);
-                else
-                    term = g_strdup (filename);
-
-                g_key_file_set_boolean (key_file, "extensions", term, TRUE);
-
-                g_free (key);
-                g_free (term);
-            }
-        g_object_unref (extensions);
-    }
-    saved = sokoke_key_file_save_to_file (key_file, filename, error);
-    g_key_file_free (key_file);
-    return saved;
-}
-
 static void
 midori_history_clear_cb (KatzeArray* array,
                          sqlite3*    db)
@@ -410,7 +175,7 @@ settings_notify_cb (MidoriWebSettings* settings,
         return;
 
     config_file = midori_paths_get_config_filename_for_writing ("config");
-    if (!settings_save_to_file (settings, app, config_file, &error))
+    if (!midori_settings_save_to_file (settings, G_OBJECT (app), config_file, &error))
     {
         g_warning (_("The configuration couldn't be saved. %s"), error->message);
         g_error_free (error);
@@ -1055,8 +820,7 @@ midori_load_session (gpointer data)
     #endif
 
     browser = midori_app_create_browser (app);
-    g_signal_connect_after (katze_object_get_object (app, "settings"), "notify",
-        G_CALLBACK (settings_notify_cb), app);
+    g_signal_connect_after (settings, "notify", G_CALLBACK (settings_notify_cb), app);
 
     config_file = midori_paths_get_config_filename_for_reading ("session.old.xbel");
     if (g_access (config_file, F_OK) == 0)
@@ -1591,7 +1355,7 @@ main (int    argc,
 
         if (private || !webapp)
         {
-            settings = settings_and_accels_new (&extensions);
+            settings = midori_settings_new_full (&extensions);
             g_strfreev (extensions);
             search_engines = midori_search_engines_new_from_folder (NULL);
             g_object_set (browser, "search-engines", search_engines, NULL);
@@ -1802,7 +1566,7 @@ main (int    argc,
     /* Load configuration file */
     error_messages = g_string_new (NULL);
     error = NULL;
-    settings = settings_and_accels_new (&extensions);
+    settings = midori_settings_new_full (&extensions);
     g_object_set (settings, "enable-developer-extras", TRUE, NULL);
     g_object_set (settings, "enable-html5-database", TRUE, NULL);
     midori_startup_timer ("Config and accels read: \t%f");
@@ -1988,7 +1752,6 @@ main (int    argc,
     g_object_unref (search_engines);
     g_object_unref (bookmarks);
     g_object_unref (trash);
-    g_object_unref (settings);
     g_signal_connect (app, "add-browser",
         G_CALLBACK (midori_app_add_browser_cb), NULL);
     midori_startup_timer ("App prepared: \t%f");
@@ -2007,13 +1770,10 @@ main (int    argc,
 
     gtk_main ();
 
-    settings = katze_object_get_object (app, "settings");
     settings_notify_cb (settings, NULL, app);
-
     g_object_get (settings, "maximum-history-age", &max_history_age, NULL);
     midori_history_terminate (history, max_history_age);
     midori_private_data_on_quit (settings);
-
     /* Removing KatzeHttpCookies makes it save outstanding changes */
     soup_session_remove_feature_by_type (webkit_get_default_session (),
                                          KATZE_TYPE_HTTP_COOKIES);
diff --git a/midori/midori-websettings.c b/midori/midori-websettings.c
index e0549b6..b1ef0fc 100644
--- a/midori/midori-websettings.c
+++ b/midori/midori-websettings.c
@@ -13,6 +13,7 @@
 #include "midori-websettings.h"
 
 #include "midori-app.h"
+#include "midori-extension.h"
 #include "sokoke.h"
 #include <midori/midori-core.h> /* Vala API */
 
@@ -1272,3 +1273,240 @@ midori_web_settings_remove_style (MidoriWebSettings* settings,
         }
     }
 }
+
+MidoriWebSettings*
+midori_settings_new_full (gchar*** extensions)
+{
+    MidoriWebSettings* settings = midori_web_settings_new ();
+    gchar* config_file = midori_paths_get_config_filename_for_reading ("config");
+    GKeyFile* key_file = g_key_file_new ();
+    GError* error = NULL;
+    GObjectClass* class;
+    guint i, n_properties;
+    GParamSpec** pspecs;
+    GParamSpec* pspec;
+    GType type;
+    const gchar* property;
+    gchar* str;
+    gint integer;
+    gfloat number;
+    gboolean boolean;
+
+    if (!g_key_file_load_from_file (key_file, config_file,
+                                    G_KEY_FILE_KEEP_COMMENTS, &error))
+    {
+        if (error->code == G_FILE_ERROR_NOENT)
+        {
+            GError* inner_error = NULL;
+            katze_assign (config_file, midori_paths_get_preset_filename (NULL, "config"));
+            g_key_file_load_from_file (key_file, config_file,
+                                       G_KEY_FILE_KEEP_COMMENTS, &inner_error);
+            if (inner_error != NULL)
+            {
+                printf (_("The configuration couldn't be loaded: %s\n"),
+                        inner_error->message);
+                g_error_free (inner_error);
+            }
+        }
+        else
+            printf (_("The configuration couldn't be loaded: %s\n"),
+                    error->message);
+        g_error_free (error);
+    }
+
+    class = G_OBJECT_GET_CLASS (settings);
+    pspecs = g_object_class_list_properties (class, &n_properties);
+    for (i = 0; i < n_properties; i++)
+    {
+        pspec = pspecs[i];
+        if (!(pspec->flags & G_PARAM_WRITABLE))
+            continue;
+
+        type = G_PARAM_SPEC_TYPE (pspec);
+        property = g_param_spec_get_name (pspec);
+        if (!g_key_file_has_key (key_file, "settings", property, NULL))
+            continue;
+
+        if (type == G_TYPE_PARAM_STRING)
+        {
+            str = g_key_file_get_string (key_file, "settings", property, NULL);
+            g_object_set (settings, property, str, NULL);
+            g_free (str);
+        }
+        else if (type == G_TYPE_PARAM_INT)
+        {
+            integer = g_key_file_get_integer (key_file, "settings", property, NULL);
+            g_object_set (settings, property, integer, NULL);
+        }
+        else if (type == G_TYPE_PARAM_FLOAT)
+        {
+            number = g_key_file_get_double (key_file, "settings", property, NULL);
+            g_object_set (settings, property, number, NULL);
+        }
+        else if (type == G_TYPE_PARAM_BOOLEAN)
+        {
+            boolean = g_key_file_get_boolean (key_file, "settings", property, NULL);
+            g_object_set (settings, property, boolean, NULL);
+        }
+        else if (type == G_TYPE_PARAM_ENUM)
+        {
+            GEnumClass* enum_class = G_ENUM_CLASS (
+                g_type_class_peek (pspec->value_type));
+            GEnumValue* enum_value;
+            str = g_key_file_get_string (key_file, "settings", property, NULL);
+            enum_value = g_enum_get_value_by_name (enum_class, str);
+            if (enum_value)
+                g_object_set (settings, property, enum_value->value, NULL);
+            else
+                g_warning (_("Value '%s' is invalid for %s"),
+                           str, property);
+            g_free (str);
+        }
+        else
+            g_warning (_("Invalid configuration value '%s'"), property);
+    }
+    g_free (pspecs);
+
+    *extensions = g_key_file_get_keys (key_file, "extensions", NULL, NULL);
+
+    g_key_file_free (key_file);
+
+    /* Load accelerators */
+    katze_assign (config_file, midori_paths_get_config_filename_for_reading ("accels"));
+    if (g_access (config_file, F_OK) != 0)
+        katze_assign (config_file, midori_paths_get_preset_filename (NULL, "accels"));
+    gtk_accel_map_load (config_file);
+    g_free (config_file);
+
+    return settings;
+}
+
+gboolean
+midori_settings_save_to_file (MidoriWebSettings* settings,
+                              GObject*           app,
+                              const gchar*       filename,
+                              GError**           error)
+{
+    GKeyFile* key_file;
+    GObjectClass* class;
+    guint i, n_properties;
+    GParamSpec** pspecs;
+    GParamSpec* pspec;
+    GType type;
+    const gchar* property;
+    gboolean saved;
+    KatzeArray* extensions = katze_object_get_object (app, "extensions");
+    MidoriExtension* extension;
+    gchar** _extensions;
+
+    key_file = g_key_file_new ();
+    class = G_OBJECT_GET_CLASS (settings);
+    pspecs = g_object_class_list_properties (class, &n_properties);
+    for (i = 0; i < n_properties; i++)
+    {
+        pspec = pspecs[i];
+        type = G_PARAM_SPEC_TYPE (pspec);
+        property = g_param_spec_get_name (pspec);
+        if (!(pspec->flags & G_PARAM_WRITABLE))
+            continue;
+        if (type == G_TYPE_PARAM_STRING)
+        {
+            gchar* string;
+            const gchar* def_string = G_PARAM_SPEC_STRING (pspec)->default_value;
+            if (!strcmp (property, "user-stylesheet-uri"))
+            {
+                const gchar* user_stylesheet_uri = g_object_get_data (G_OBJECT (settings), property);
+                if (user_stylesheet_uri)
+                {
+                    g_key_file_set_string (key_file, "settings", property,
+                        user_stylesheet_uri);
+                }
+                else
+                    g_key_file_remove_key (key_file, "settings", property, NULL);
+                continue;
+            }
+
+            g_object_get (settings, property, &string, NULL);
+            if (!def_string)
+                def_string = "";
+            if (strcmp (string ? string : "", def_string))
+                g_key_file_set_string (key_file, "settings", property, string ? string : "");
+            g_free (string);
+        }
+        else if (type == G_TYPE_PARAM_INT)
+        {
+            gint integer;
+            g_object_get (settings, property, &integer, NULL);
+            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);
+            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);
+            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_peek (pspec->value_type));
+            gint integer;
+            GEnumValue* enum_value;
+            g_object_get (settings, property, &integer, NULL);
+            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);
+    }
+    g_free (pspecs);
+
+    /* Take frozen list of active extensions until preferences reset it */
+    if ((_extensions = g_object_get_data (G_OBJECT (app), "extensions")))
+    {
+        i = 0;
+        while (_extensions[i])
+        {
+            g_key_file_set_boolean (key_file, "extensions", _extensions[i], TRUE);
+            i++;
+        }
+    }
+    else if (extensions)
+    {
+        KATZE_ARRAY_FOREACH_ITEM (extension, extensions)
+            if (midori_extension_is_active (extension))
+            {
+                const gchar* filename = g_object_get_data (
+                    G_OBJECT (extension), "filename");
+
+                gchar* key;
+                gchar* term;
+
+                key = katze_object_get_string (extension, "key");
+                if (key && *key)
+                    term = g_strdup_printf ("%s/%s", filename, key);
+                else
+                    term = g_strdup (filename);
+
+                g_key_file_set_boolean (key_file, "extensions", term, TRUE);
+
+                g_free (key);
+                g_free (term);
+            }
+        g_object_unref (extensions);
+    }
+    saved = sokoke_key_file_save_to_file (key_file, filename, error);
+    g_key_file_free (key_file);
+    return saved;
+}
+
diff --git a/midori/midori-websettings.h b/midori/midori-websettings.h
index 9907895..c2491fe 100644
--- a/midori/midori-websettings.h
+++ b/midori/midori-websettings.h
@@ -1,5 +1,5 @@
 /*
- Copyright (C) 2008-2010 Christian Dywan <christian at twotoasts.de>
+ Copyright (C) 2008-2012 Christian Dywan <christian at twotoasts.de>
 
  This library is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
@@ -177,6 +177,15 @@ midori_web_settings_get_site_data_policy   (MidoriWebSettings* settings,
 const gchar*
 midori_web_settings_get_accept_language    (MidoriWebSettings* settings);
 
+MidoriWebSettings*
+midori_settings_new_full                   (gchar***           extensions);
+
+gboolean
+midori_settings_save_to_file               (MidoriWebSettings* settings,
+                                            GObject*           app,
+                                            const gchar*       filename,
+                                            GError**           error);
+
 G_END_DECLS
 
 #endif /* __MIDORI_WEB_SETTINGS_H__ */


More information about the Xfce4-commits mailing list