aboutsummaryrefslogtreecommitdiffstats
path: root/embed/ephy-embed-prefs.c
diff options
context:
space:
mode:
authorDiego Escalante Urrelo <descalante@igalia.com>2010-07-25 07:59:55 +0800
committerXan Lopez <xan@gnome.org>2010-10-08 17:09:11 +0800
commit5df7af9e3041102a5f5601d60faa11c38b48de75 (patch)
treefe0306b87e0874a8541a082fe844f4a487331161 /embed/ephy-embed-prefs.c
parent60d08f64c2466ce8eda20d832239ec6defc9ef06 (diff)
downloadgsoc2013-epiphany-5df7af9e3041102a5f5601d60faa11c38b48de75.tar
gsoc2013-epiphany-5df7af9e3041102a5f5601d60faa11c38b48de75.tar.gz
gsoc2013-epiphany-5df7af9e3041102a5f5601d60faa11c38b48de75.tar.bz2
gsoc2013-epiphany-5df7af9e3041102a5f5601d60faa11c38b48de75.tar.lz
gsoc2013-epiphany-5df7af9e3041102a5f5601d60faa11c38b48de75.tar.xz
gsoc2013-epiphany-5df7af9e3041102a5f5601d60faa11c38b48de75.tar.zst
gsoc2013-epiphany-5df7af9e3041102a5f5601d60faa11c38b48de75.zip
gsettings: port epiphany to gsettings
Adds our own schemas, a migration file and removes old gconf API and files. Bug #624485
Diffstat (limited to 'embed/ephy-embed-prefs.c')
-rw-r--r--embed/ephy-embed-prefs.c353
1 files changed, 129 insertions, 224 deletions
diff --git a/embed/ephy-embed-prefs.c b/embed/ephy-embed-prefs.c
index b39238b08..2b43f69ea 100644
--- a/embed/ephy-embed-prefs.c
+++ b/embed/ephy-embed-prefs.c
@@ -1,4 +1,5 @@
/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2; -*- */
+/* vim: set sw=2 ts=2 sts=2 et: */
/* Copyright © 2008 Xan Lopez <xan@gnome.org>
*
* This program is free software; you can redistribute it and/or modify
@@ -22,105 +23,34 @@
#include <glib.h>
#include <webkit/webkit.h>
-#include "eel-gconf-extensions.h"
#include "ephy-embed-prefs.h"
+#include "ephy-embed-shell.h"
#include "ephy-embed-utils.h"
#include "ephy-file-helpers.h"
#include "ephy-langs.h"
+#include "ephy-prefs.h"
+#include "ephy-settings.h"
typedef struct
{
- char *gconf_key;
+ char *schema;
+ char *key;
char *webkit_pref;
- GConfClientNotifyFunc func;
- guint cnxn_id;
+ GCallback callback;
} PrefData;
-static WebKitWebSettings *settings = NULL;
-static guint *connections = NULL;
+static WebKitWebSettings *webkit_settings = NULL;
static void
-webkit_pref_callback_int (GConfClient *client,
- guint cnxn_id,
- GConfEntry *entry,
- gpointer data)
-{
- GConfValue *gcvalue;
- gint value = 0;
- char *webkit_pref = data;
-
- gcvalue = gconf_entry_get_value (entry);
-
- /* happens on initial notify if the key doesn't exist */
- if (gcvalue != NULL &&
- gcvalue->type == GCONF_VALUE_INT) {
- value = gconf_value_get_int (gcvalue);
- value = MAX (value, 0);
- }
-
- g_object_set (settings, webkit_pref, value, NULL);
-}
-
-static void
-webkit_pref_callback_boolean (GConfClient *client,
- guint cnxn_id,
- GConfEntry *entry,
- gpointer data)
-{
- GConfValue *gcvalue;
- gboolean value = FALSE;
- char *webkit_pref = data;
-
- gcvalue = gconf_entry_get_value (entry);
-
- /* happens on initial notify if the key doesn't exist */
- if (gcvalue != NULL &&
- gcvalue->type == GCONF_VALUE_BOOL) {
- value = gconf_value_get_bool (gcvalue);
- }
-
- g_object_set (settings, webkit_pref, value, NULL);
-}
-
-static void
-webkit_pref_callback_string (GConfClient *client,
- guint cnxn_id,
- GConfEntry *entry,
- gpointer data)
-{
- GConfValue *gcvalue;
- const char *value = NULL;
- char *webkit_pref = data;
-
- gcvalue = gconf_entry_get_value (entry);
-
- /* happens on initial notify if the key doesn't exist */
- if (gcvalue != NULL &&
- gcvalue->type == GCONF_VALUE_STRING) {
- value = gconf_value_get_string (gcvalue);
- }
-
- g_object_set (settings, webkit_pref, value, NULL);
-}
-
-static void
-webkit_pref_callback_user_stylesheet (GConfClient *client,
- guint cnxn_id,
- GConfEntry *entry,
+webkit_pref_callback_user_stylesheet (GSettings *settings,
+ char *key,
gpointer data)
{
- GConfValue *gcvalue;
gboolean value = FALSE;
char *uri = NULL;
char *webkit_pref = data;
- gcvalue = gconf_entry_get_value (entry);
-
- /* happens on initial notify if the key doesn't exist */
- if (gcvalue != NULL &&
- gcvalue->type == GCONF_VALUE_BOOL) {
- value = gconf_value_get_bool (gcvalue);
- }
+ value = g_settings_get_boolean (settings, key);
if (value)
/* We need the leading file://, so use g_strconcat instead
@@ -130,7 +60,8 @@ webkit_pref_callback_user_stylesheet (GConfClient *client,
G_DIR_SEPARATOR_S,
USER_STYLESHEET_FILENAME,
NULL);
- g_object_set (settings, webkit_pref, uri, NULL);
+
+ g_object_set (webkit_settings, webkit_pref, uri, NULL);
g_free (uri);
}
@@ -175,7 +106,7 @@ webkit_pref_get_internal_user_agent (void)
g_key_file_free (branding_keyfile);
- g_object_get (settings, "user-agent", &webkit_user_agent, NULL);
+ g_object_get (webkit_settings, "user-agent", &webkit_user_agent, NULL);
user_agent = g_strconcat (webkit_user_agent, " ",
vendor_user_agent ? vendor_user_agent : "",
@@ -190,51 +121,37 @@ webkit_pref_get_internal_user_agent (void)
}
static void
-webkit_pref_callback_user_agent (GConfClient *client,
- guint cnxn_id,
- GConfEntry *entry,
+webkit_pref_callback_user_agent (GSettings *settings,
+ char *key,
gpointer data)
{
- GConfValue *gcvalue;
- const char *value = NULL;
+ char *value = NULL;
static char *internal_user_agent = NULL;
char *webkit_pref = data;
- gcvalue = gconf_entry_get_value (entry);
-
- /* happens on initial notify if the key doesn't exist */
- if (gcvalue != NULL &&
- gcvalue->type == GCONF_VALUE_STRING) {
- value = gconf_value_get_string (gcvalue);
- }
+ value = g_settings_get_string (settings, key);
if (value == NULL || value[0] == '\0') {
if (internal_user_agent == NULL)
internal_user_agent = webkit_pref_get_internal_user_agent ();
- g_object_set (settings, webkit_pref, internal_user_agent, NULL);
+ g_object_set (webkit_settings, webkit_pref, internal_user_agent, NULL);
} else
- g_object_set (settings, webkit_pref, value, NULL);
+ g_object_set (webkit_settings, webkit_pref, value, NULL);
+
+ g_free (value);
}
static void
-webkit_pref_callback_font_size (GConfClient *client,
- guint cnxn_id,
- GConfEntry *entry,
+webkit_pref_callback_font_size (GSettings *settings,
+ char *key,
gpointer data)
{
- GConfValue *gcvalue;
char *webkit_pref = data;
- const char *value = NULL;
+ char *value = NULL;
int size = 9; /* FIXME: What to use here? */
- gcvalue = gconf_entry_get_value (entry);
-
- /* happens on initial notify if the key doesn't exist */
- if (gcvalue != NULL &&
- gcvalue->type == GCONF_VALUE_STRING) {
- value = gconf_value_get_string (gcvalue);
- }
+ value = g_settings_get_string (settings, key);
if (value) {
PangoFontDescription* desc;
@@ -246,26 +163,19 @@ webkit_pref_callback_font_size (GConfClient *client,
pango_font_description_free (desc);
}
- g_object_set (settings, webkit_pref, size, NULL);
+ g_object_set (webkit_settings, webkit_pref, size, NULL);
+ g_free (value);
}
static void
-webkit_pref_callback_font_family (GConfClient *client,
- guint cnxn_id,
- GConfEntry *entry,
+webkit_pref_callback_font_family (GSettings *settings,
+ char *key,
gpointer data)
{
- GConfValue *gcvalue;
char *webkit_pref = data;
- const char *value = NULL;
-
- gcvalue = gconf_entry_get_value (entry);
+ char *value = NULL;
- /* happens on initial notify if the key doesn't exist */
- if (gcvalue != NULL &&
- gcvalue->type == GCONF_VALUE_STRING) {
- value = gconf_value_get_string (gcvalue);
- }
+ value = g_settings_get_string (settings, key);
if (value) {
PangoFontDescription* desc;
@@ -273,9 +183,11 @@ webkit_pref_callback_font_family (GConfClient *client,
desc = pango_font_description_from_string (value);
family = pango_font_description_get_family (desc);
- g_object_set (settings, webkit_pref, family, NULL);
+ g_object_set (webkit_settings, webkit_pref, family, NULL);
pango_font_description_free (desc);
}
+
+ g_free (value);
}
/* Part of this code taken from libsoup (soup-session.c) */
@@ -324,40 +236,31 @@ build_accept_languages_header (GArray *languages)
/* Based on Christian Persch's code from gecko backend of epiphany
(old transform_accept_languages_list() function) */
static void
-webkit_pref_callback_accept_languages (GConfClient *client,
- guint cnxn_id,
- GConfEntry *entry,
+webkit_pref_callback_accept_languages (GSettings *settings,
+ char *key,
gpointer data)
{
SoupSession *session;
- GConfValue *gcvalue;
GArray *array;
- GSList *languages, *l;
- char **array_data;
+ char **languages;
char *langs_str;
char *webkit_pref;
+ int i;
webkit_pref = data;
- gcvalue = gconf_entry_get_value (entry);
- if (gcvalue == NULL ||
- gcvalue->type != GCONF_VALUE_LIST ||
- gconf_value_get_list_type (gcvalue) != GCONF_VALUE_STRING)
- return;
- languages = gconf_value_get_list (gcvalue);
+ languages = g_settings_get_strv (settings, key);
array = g_array_new (TRUE, FALSE, sizeof (char *));
- for (l = languages; l != NULL; l = l->next) {
- const char *lang = gconf_value_get_string ((GConfValue *) l->data);
-
- if ((lang != NULL) && !g_strcmp0 (lang, "system")) {
- ephy_langs_append_languages (array);
- } else if (lang != NULL && lang[0] != '\0') {
- char *str = g_ascii_strdown (lang, -1);
- g_array_append_val (array, str);
- }
- }
+ for (i = 0; languages[i]; i++) {
+ if (!g_strcmp0 (languages[i], "system")) {
+ ephy_langs_append_languages (array);
+ } else if (languages[i][0] != '\0') {
+ char *str = g_ascii_strdown (languages[i], -1);
+ g_array_append_val (array, str);
+ }
+ }
ephy_langs_sanitise (array);
@@ -367,26 +270,24 @@ webkit_pref_callback_accept_languages (GConfClient *client,
session = webkit_get_default_session ();
g_object_set (G_OBJECT (session), webkit_pref, langs_str, NULL);
- /* Free memory */
- array_data = (char **) g_array_free (array, FALSE);
- g_strfreev (array_data);
+ g_strfreev (languages);
g_free (langs_str);
}
void
ephy_embed_prefs_set_cookie_jar_policy (SoupCookieJar *jar,
- const char *gconf_policy)
+ const char *settings_policy)
{
SoupCookieJarAcceptPolicy policy;
g_return_if_fail (SOUP_IS_COOKIE_JAR (jar));
- g_return_if_fail (gconf_policy != NULL);
+ g_return_if_fail (settings_policy != NULL);
- if (g_str_equal (gconf_policy, "nowhere"))
+ if (g_str_equal (settings_policy, "never"))
policy = SOUP_COOKIE_JAR_ACCEPT_NEVER;
- else if (g_str_equal (gconf_policy, "anywhere"))
+ else if (g_str_equal (settings_policy, "always"))
policy = SOUP_COOKIE_JAR_ACCEPT_ALWAYS;
- else if (g_str_equal (gconf_policy, "current site"))
+ else if (g_str_equal (settings_policy, "no-third-party"))
policy = SOUP_COOKIE_JAR_ACCEPT_NO_THIRD_PARTY;
else {
g_warn_if_reached ();
@@ -397,25 +298,16 @@ ephy_embed_prefs_set_cookie_jar_policy (SoupCookieJar *jar,
}
static void
-webkit_pref_callback_cookie_accept_policy (GConfClient *client,
- guint cnxn_id,
- GConfEntry *entry,
+webkit_pref_callback_cookie_accept_policy (GSettings *settings,
+ char *key,
gpointer data)
{
SoupSession *session;
char *webkit_pref;
- GConfValue *gcvalue;
- const char *value = NULL;
+ char *value = NULL;
webkit_pref = data;
-
- gcvalue = gconf_entry_get_value (entry);
-
- /* happens on initial notify if the key doesn't exist */
- if (gcvalue != NULL &&
- gcvalue->type == GCONF_VALUE_STRING) {
- value = gconf_value_get_string (gcvalue);
- }
+ value = g_settings_get_string (settings, key);
if (value) {
SoupSessionFeature *jar;
@@ -427,58 +319,48 @@ webkit_pref_callback_cookie_accept_policy (GConfClient *client,
ephy_embed_prefs_set_cookie_jar_policy (SOUP_COOKIE_JAR (jar), value);
}
+
+ g_free (value);
}
static const PrefData webkit_pref_entries[] =
{
- { CONF_RENDERING_FONT_MIN_SIZE,
- "minimum-logical-font-size",
- webkit_pref_callback_int },
- { CONF_DESKTOP_FONT_VAR_NAME,
+ { "org.gnome.desktop.interface",
+ "font-name",
"default-font-size",
- webkit_pref_callback_font_size },
- { CONF_DESKTOP_FONT_VAR_NAME,
+ G_CALLBACK (webkit_pref_callback_font_size) },
+ { "org.gnome.desktop.interface",
+ "font-name",
"default-font-family",
- webkit_pref_callback_font_family },
- { CONF_DESKTOP_FONT_VAR_NAME,
+ G_CALLBACK (webkit_pref_callback_font_family) },
+ { "org.gnome.desktop.interface",
+ "font-name",
"sans-serif-font-family",
- webkit_pref_callback_font_family },
- { CONF_DESKTOP_FONT_FIXED_NAME,
+ G_CALLBACK (webkit_pref_callback_font_family) },
+ { "org.gnome.desktop.interface",
+ "monospace-font-name",
"default-monospace-font-size",
- webkit_pref_callback_font_size },
- { CONF_DESKTOP_FONT_FIXED_NAME,
+ G_CALLBACK (webkit_pref_callback_font_size) },
+ { "org.gnome.desktop.interface",
+ "monospace-font-name",
"monospace-font-family",
- webkit_pref_callback_font_family },
- { CONF_SECURITY_JAVASCRIPT_ENABLED,
- "enable-scripts",
- webkit_pref_callback_boolean },
- { CONF_LANGUAGE_DEFAULT_ENCODING,
- "default-encoding",
- webkit_pref_callback_string },
- { CONF_WEB_INSPECTOR_ENABLED,
- "enable-developer-extras",
- webkit_pref_callback_boolean },
- { CONF_USER_CSS_ENABLED,
+ G_CALLBACK (webkit_pref_callback_font_family) },
+ { EPHY_PREFS_WEB_SCHEMA,
+ EPHY_PREFS_WEB_ENABLE_USER_CSS,
"user-stylesheet-uri",
- webkit_pref_callback_user_stylesheet },
- { CONF_CARET_BROWSING_ENABLED,
- "enable-caret-browsing",
- webkit_pref_callback_boolean },
- { CONF_SECURITY_ALLOW_POPUPS,
- "javascript-can-open-windows-automatically",
- webkit_pref_callback_boolean },
- { CONF_RENDERING_LANGUAGE,
+ G_CALLBACK (webkit_pref_callback_user_stylesheet) },
+ { EPHY_PREFS_WEB_SCHEMA,
+ EPHY_PREFS_WEB_LANGUAGE,
"accept-language",
- webkit_pref_callback_accept_languages },
- { CONF_USER_AGENT,
+ G_CALLBACK (webkit_pref_callback_accept_languages) },
+ { EPHY_PREFS_SCHEMA,
+ EPHY_PREFS_USER_AGENT,
"user-agent",
- webkit_pref_callback_user_agent },
- { CONF_SECURITY_COOKIES_ACCEPT,
+ G_CALLBACK (webkit_pref_callback_user_agent) },
+ { EPHY_PREFS_WEB_SCHEMA,
+ EPHY_PREFS_WEB_COOKIES_POLICY,
"accept-policy",
- webkit_pref_callback_cookie_accept_policy },
- { CONF_SECURITY_PLUGINS_ENABLED,
- "enable-plugins",
- webkit_pref_callback_boolean }
+ G_CALLBACK (webkit_pref_callback_cookie_accept_policy) },
};
static void
@@ -493,12 +375,10 @@ ephy_embed_prefs_init (void)
{
int i;
- eel_gconf_monitor_add ("/apps/epiphany/web");
-
- settings = webkit_web_settings_new ();
+ webkit_settings = webkit_web_settings_new ();
/* Hardcoded settings */
- g_object_set (settings,
+ g_object_set (webkit_settings,
"auto-shrink-images", FALSE,
"enable-default-context-menu", FALSE,
"enable-site-specific-quirks", TRUE,
@@ -506,33 +386,58 @@ ephy_embed_prefs_init (void)
"auto-resize-window", TRUE,
NULL);
- /* Connections */
- connections = g_malloc (sizeof (guint) * G_N_ELEMENTS (webkit_pref_entries));
-
for (i = 0; i < G_N_ELEMENTS (webkit_pref_entries); i++) {
- connections[i] = eel_gconf_notification_add (webkit_pref_entries[i].gconf_key,
- webkit_pref_entries[i].func,
- webkit_pref_entries[i].webkit_pref);
+ GSettings *settings;
+ char *key;
+
+ settings = ephy_settings_get (webkit_pref_entries[i].schema);
+ key = g_strconcat ("changed::", webkit_pref_entries[i].key, NULL);
- eel_gconf_notify (webkit_pref_entries[i].gconf_key);
+ g_signal_connect (settings, key,
+ webkit_pref_entries[i].callback,
+ webkit_pref_entries[i].webkit_pref);
+ g_free (key);
}
+
+ g_settings_bind (EPHY_SETTINGS_WEB,
+ EPHY_PREFS_WEB_ENABLE_JAVASCRIPT,
+ webkit_settings, "enable-scripts",
+ G_SETTINGS_BIND_GET);
+ g_settings_bind (EPHY_SETTINGS_MAIN,
+ EPHY_PREFS_ENABLE_WEB_INSPECTOR,
+ webkit_settings, "enable-developer-extras",
+ G_SETTINGS_BIND_GET);
+ g_settings_bind (EPHY_SETTINGS_MAIN,
+ EPHY_PREFS_ENABLE_CARET_BROWSING,
+ webkit_settings, "enable-caret-browsing",
+ G_SETTINGS_BIND_GET);
+ g_settings_bind (EPHY_SETTINGS_WEB,
+ EPHY_PREFS_WEB_ENABLE_POPUPS,
+ webkit_settings, "javascript-can-open-windows-automatically",
+ G_SETTINGS_BIND_GET);
+ g_settings_bind (EPHY_SETTINGS_WEB,
+ EPHY_PREFS_WEB_ENABLE_PLUGINS,
+ webkit_settings, "enable-plugins",
+ G_SETTINGS_BIND_GET);
+ g_settings_bind (EPHY_SETTINGS_WEB,
+ EPHY_PREFS_WEB_FONT_MIN_SIZE,
+ webkit_settings, "minimum-logical-font-size",
+ G_SETTINGS_BIND_GET);
+ g_settings_bind (EPHY_SETTINGS_WEB,
+ EPHY_PREFS_WEB_DEFAULT_ENCODING,
+ webkit_settings, "default-encoding",
+ G_SETTINGS_BIND_GET);
}
void
ephy_embed_prefs_shutdown (void)
{
- int i;
-
- for (i = 0; i < G_N_ELEMENTS (webkit_pref_entries); i++)
- eel_gconf_notification_remove (connections[i]);
-
- g_free (connections);
- g_object_unref (settings);
+ g_object_unref (webkit_settings);
}
void
ephy_embed_prefs_add_embed (EphyEmbed *embed)
{
- ephy_embed_prefs_apply (embed, settings);
+ ephy_embed_prefs_apply (embed, webkit_settings);
}