epiphany r7995 - trunk/embed/webkit



Author: xan
Date: Wed Feb 27 21:55:16 2008
New Revision: 7995
URL: http://svn.gnome.org/viewvc/epiphany?rev=7995&view=rev

Log:
Support more preferences in the WebKit backend and add code to easily add
support for more (in theory..).


Modified:
   trunk/embed/webkit/webkit-embed-prefs.c

Modified: trunk/embed/webkit/webkit-embed-prefs.c
==============================================================================
--- trunk/embed/webkit/webkit-embed-prefs.c	(original)
+++ trunk/embed/webkit/webkit-embed-prefs.c	Wed Feb 27 21:55:16 2008
@@ -24,57 +24,130 @@
 #include "eel-gconf-extensions.h"
 #include "ephy-embed-prefs.h"
 
+typedef struct
+{
+  char *gconf_key;
+  char *webkit_pref;
+  GConfClientNotifyFunc func;
+  guint cnxn_id;
+} PrefData;
+
 static WebKitWebSettings *settings = NULL;
+static guint *connections = NULL;
 
 static void
-webkit_embed_prefs_apply (WebKitEmbed *embed, WebKitWebSettings *settings)
+webkit_pref_callback_int (GConfClient *client,
+                          guint cnxn_id,
+                          GConfEntry *entry,
+                          gpointer data)
 {
-  webkit_web_view_set_settings (WEBKIT_WEB_VIEW (GTK_BIN (GTK_BIN (embed)->child)->child),
-                                settings);
+  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
-notify_minimum_size_cb (GConfClient *client,
-                        guint cnxn_id,
-                        GConfEntry *entry,
-                        gpointer data)
+webkit_pref_callback_boolean (GConfClient *client,
+                              guint cnxn_id,
+                              GConfEntry *entry,
+                              gpointer data)
 {
   GConfValue *gcvalue;
-  gint size = 0;
+  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_INT) {
-      size = gconf_value_get_int (gcvalue);
-      size = MAX (size, 0);
+      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, "minimum-font-size", size, NULL);
+  g_object_set (settings, webkit_pref, value, NULL);
 }
 
-static guint min_font_size_cnxn_id;
+static const PrefData webkit_pref_entries[] =
+  {
+    { CONF_RENDERING_FONT_MIN_SIZE,
+      "minimum-font-size",
+      webkit_pref_callback_int },
+    { CONF_SECURITY_JAVASCRIPT_ENABLED,
+      "enable-scripts",
+      webkit_pref_callback_boolean },
+    { CONF_LANGUAGE_DEFAULT_ENCODING,
+      "default-encoding",
+      webkit_pref_callback_string }
+  };
+
+static void
+webkit_embed_prefs_apply (WebKitEmbed *embed, WebKitWebSettings *settings)
+{
+  webkit_web_view_set_settings (WEBKIT_WEB_VIEW (GTK_BIN (GTK_BIN (embed)->child)->child),
+                                settings);
+}
 
 void
 webkit_embed_prefs_init (void)
 {
+  int i;
+
   eel_gconf_monitor_add ("/apps/epiphany/web");
 
   settings = webkit_web_settings_new ();
 
-  min_font_size_cnxn_id = eel_gconf_notification_add (CONF_RENDERING_FONT_MIN_SIZE,
-                                                      (GConfClientNotifyFunc) notify_minimum_size_cb,
-                                                      NULL);
+  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);
 
-  eel_gconf_notify (CONF_RENDERING_FONT_MIN_SIZE);
+    eel_gconf_notify (webkit_pref_entries[i].gconf_key);
+  }
 }
 
 void
 webkit_embed_prefs_shutdown (void)
 {
-  eel_gconf_notification_remove (min_font_size_cnxn_id);
+  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);
 }
 



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