[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