aboutsummaryrefslogtreecommitdiffstats
path: root/modules/settings
diff options
context:
space:
mode:
Diffstat (limited to 'modules/settings')
-rw-r--r--modules/settings/Makefile.am6
-rw-r--r--modules/settings/e-settings-deprecated.c2
-rw-r--r--modules/settings/e-settings-spell-checker.c117
-rw-r--r--modules/settings/e-settings-spell-checker.h65
-rw-r--r--modules/settings/e-settings-web-view-gtkhtml.c324
-rw-r--r--modules/settings/e-settings-web-view-gtkhtml.h64
-rw-r--r--modules/settings/e-settings-web-view.c189
-rw-r--r--modules/settings/evolution-module-settings.c4
8 files changed, 367 insertions, 404 deletions
diff --git a/modules/settings/Makefile.am b/modules/settings/Makefile.am
index 3c9bdb0327..c03253db9e 100644
--- a/modules/settings/Makefile.am
+++ b/modules/settings/Makefile.am
@@ -8,7 +8,6 @@ module_settings_la_CPPFLAGS = \
-DG_LOG_DOMAIN=\"evolution-module-settings\" \
$(EVOLUTION_DATA_SERVER_CFLAGS) \
$(GNOME_PLATFORM_CFLAGS) \
- $(GTKHTML_CFLAGS) \
$(CODE_COVERAGE_CFLAGS) \
$(NULL)
@@ -46,12 +45,12 @@ module_settings_la_SOURCES = \
e-settings-message-list.h \
e-settings-name-selector-entry.c \
e-settings-name-selector-entry.h \
+ e-settings-spell-checker.c \
+ e-settings-spell-checker.h \
e-settings-spell-entry.c \
e-settings-spell-entry.h \
e-settings-web-view.c \
e-settings-web-view.h \
- e-settings-web-view-gtkhtml.c \
- e-settings-web-view-gtkhtml.h \
e-settings-weekday-chooser.c \
e-settings-weekday-chooser.h \
$(NULL)
@@ -65,7 +64,6 @@ module_settings_la_LIBADD = \
$(top_builddir)/calendar/gui/libevolution-calendar.la \
$(EVOLUTION_DATA_SERVER_LIBS) \
$(GNOME_PLATFORM_LIBS) \
- $(GTKHTML_LIBS) \
$(NULL)
module_settings_la_LDFLAGS = \
diff --git a/modules/settings/e-settings-deprecated.c b/modules/settings/e-settings-deprecated.c
index b34e791b0d..d519a91e0e 100644
--- a/modules/settings/e-settings-deprecated.c
+++ b/modules/settings/e-settings-deprecated.c
@@ -332,7 +332,7 @@ static void
settings_deprecated_image_loading_policy_cb (GSettings *settings,
const gchar *key)
{
- EMailImageLoadingPolicy policy;
+ EImageLoadingPolicy policy;
policy = g_settings_get_enum (settings, "image-loading-policy");
e_settings_deprecated_set_int_with_change_test (settings, "load-http-images", policy);
diff --git a/modules/settings/e-settings-spell-checker.c b/modules/settings/e-settings-spell-checker.c
new file mode 100644
index 0000000000..6e5f0cc843
--- /dev/null
+++ b/modules/settings/e-settings-spell-checker.c
@@ -0,0 +1,117 @@
+/*
+ * e-settings-spell-checker.c
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) version 3.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with the program; if not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+#include "e-settings-spell-checker.h"
+
+#include <e-util/e-util.h>
+
+#define E_SETTINGS_SPELL_CHECKER_GET_PRIVATE(obj) \
+ (G_TYPE_INSTANCE_GET_PRIVATE \
+ ((obj), E_TYPE_SETTINGS_SPELL_CHECKER, ESettingsSpellCheckerPrivate))
+
+struct _ESettingsSpellCheckerPrivate {
+ gint placeholder;
+};
+
+G_DEFINE_DYNAMIC_TYPE (
+ ESettingsSpellChecker,
+ e_settings_spell_checker,
+ E_TYPE_EXTENSION)
+
+static ESpellChecker *
+settings_spell_checker_get_extensible (ESettingsSpellChecker *extension)
+{
+ EExtensible *extensible;
+
+ extensible = e_extension_get_extensible (E_EXTENSION (extension));
+
+ return E_SPELL_CHECKER (extensible);
+}
+
+static void
+settings_spell_checker_constructed (GObject *object)
+{
+ ESpellChecker *spell_checker;
+ GSettings *settings;
+ gchar **strv;
+ guint ii;
+
+ /* Chain up to parent's constructed() method. */
+ G_OBJECT_CLASS (e_settings_spell_checker_parent_class)->
+ constructed (object);
+
+ /* This only initializes the active spell languages, it does not
+ * write changes back to GSettings. Only the ESpellChecker used
+ * in Composer Preferences should be doing that. */
+
+ spell_checker = settings_spell_checker_get_extensible (
+ E_SETTINGS_SPELL_CHECKER (object));
+
+ /* Make sure there are no active languages at this point. */
+ g_warn_if_fail (
+ e_spell_checker_count_active_languages (spell_checker) == 0);
+
+ settings = g_settings_new ("org.gnome.evolution.mail");
+ strv = g_settings_get_strv (settings, "composer-spell-languages");
+ g_object_unref (settings);
+
+ g_return_if_fail (strv != NULL);
+
+ for (ii = 0; strv[ii] != NULL; ii++)
+ e_spell_checker_set_language_active (
+ spell_checker, strv[ii], TRUE);
+
+ g_strfreev (strv);
+}
+
+static void
+e_settings_spell_checker_class_init (ESettingsSpellCheckerClass *class)
+{
+ GObjectClass *object_class;
+ EExtensionClass *extension_class;
+
+ g_type_class_add_private (
+ class, sizeof (ESettingsSpellCheckerPrivate));
+
+ object_class = G_OBJECT_CLASS (class);
+ object_class->constructed = settings_spell_checker_constructed;
+
+ extension_class = E_EXTENSION_CLASS (class);
+ extension_class->extensible_type = E_TYPE_SPELL_CHECKER;
+}
+
+static void
+e_settings_spell_checker_class_finalize (ESettingsSpellCheckerClass *class)
+{
+}
+
+static void
+e_settings_spell_checker_init (ESettingsSpellChecker *extension)
+{
+ extension->priv = E_SETTINGS_SPELL_CHECKER_GET_PRIVATE (extension);
+}
+
+void
+e_settings_spell_checker_type_register (GTypeModule *type_module)
+{
+ /* XXX G_DEFINE_DYNAMIC_TYPE declares a static type registration
+ * function, so we have to wrap it with a public function in
+ * order to register types from a separate compilation unit. */
+ e_settings_spell_checker_register_type (type_module);
+}
+
diff --git a/modules/settings/e-settings-spell-checker.h b/modules/settings/e-settings-spell-checker.h
new file mode 100644
index 0000000000..3e60cecf06
--- /dev/null
+++ b/modules/settings/e-settings-spell-checker.h
@@ -0,0 +1,65 @@
+/*
+ * e-settings-spell-checker.h
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) version 3.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with the program; if not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+#ifndef E_SETTINGS_SPELL_CHECKER_H
+#define E_SETTINGS_SPELL_CHECKER_H
+
+#include <libebackend/libebackend.h>
+
+/* Standard GObject macros */
+#define E_TYPE_SETTINGS_SPELL_CHECKER \
+ (e_settings_spell_checker_get_type ())
+#define E_SETTINGS_SPELL_CHECKER(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST \
+ ((obj), E_TYPE_SETTINGS_SPELL_CHECKER, ESettingsSpellChecker))
+#define E_SETTINGS_SPELL_CHECKER_CLASS(cls) \
+ (G_TYPE_CHECK_CLASS_CAST \
+ ((cls), E_TYPE_SETTINGS_SPELL_CHECKER, ESettingsSpellCheckerClass))
+#define E_IS_SETTINGS_SPELL_CHECKER(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE \
+ ((obj), E_TYPE_SETTINGS_SPELL_CHECKER))
+#define E_IS_SETTINGS_SPELL_CHECKER_CLASS(cls) \
+ (G_TYPE_CHECK_CLASS_TYPE \
+ ((cls), E_TYPE_SETTINGS_SPELL_CHECKER))
+#define E_SETTINGS_SPELL_CHECKER_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS \
+ ((obj), E_TYPE_SETTINGS_SPELL_CHECKER, ESettingsSpellCheckerClass))
+
+G_BEGIN_DECLS
+
+typedef struct _ESettingsSpellChecker ESettingsSpellChecker;
+typedef struct _ESettingsSpellCheckerClass ESettingsSpellCheckerClass;
+typedef struct _ESettingsSpellCheckerPrivate ESettingsSpellCheckerPrivate;
+
+struct _ESettingsSpellChecker {
+ EExtension parent;
+ ESettingsSpellCheckerPrivate *priv;
+};
+
+struct _ESettingsSpellCheckerClass {
+ EExtensionClass parent_class;
+};
+
+GType e_settings_spell_checker_get_type
+ (void) G_GNUC_CONST;
+void e_settings_spell_checker_type_register
+ (GTypeModule *type_module);
+
+G_END_DECLS
+
+#endif /* E_SETTINGS_SPELL_CHECKER_H */
diff --git a/modules/settings/e-settings-web-view-gtkhtml.c b/modules/settings/e-settings-web-view-gtkhtml.c
deleted file mode 100644
index 7815eb6a17..0000000000
--- a/modules/settings/e-settings-web-view-gtkhtml.c
+++ /dev/null
@@ -1,324 +0,0 @@
-/*
- * e-settings-web-view-gtkhtml.c
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <string.h>
-
-#include "e-settings-web-view-gtkhtml.h"
-
-#include <e-util/e-util.h>
-
-#define E_SETTINGS_WEB_VIEW_GTKHTML_GET_PRIVATE(obj) \
- (G_TYPE_INSTANCE_GET_PRIVATE \
- ((obj), E_TYPE_SETTINGS_WEB_VIEW_GTKHTML, ESettingsWebViewGtkHTMLPrivate))
-
-struct _ESettingsWebViewGtkHTMLPrivate {
- GtkCssProvider *css_provider;
- GSettings *settings;
- GHashTable *old_values;
-};
-
-G_DEFINE_DYNAMIC_TYPE (
- ESettingsWebViewGtkHTML,
- e_settings_web_view_gtkhtml,
- E_TYPE_EXTENSION)
-
-/* replaces content of color string */
-static void
-settings_web_view_gtkhtml_fix_color_string (gchar *color_string)
-{
- GdkColor color;
-
- if (color_string == NULL)
- return;
-
- if (strlen (color_string) < 13)
- return;
-
- if (!gdk_color_parse (color_string, &color))
- return;
-
- sprintf (
- color_string, "#%02x%02x%02x",
- (gint) color.red * 256 / 65536,
- (gint) color.green * 256 / 65536,
- (gint) color.blue * 256 / 65536);
-}
-
-static void
-settings_web_view_gtkhtml_load_style (ESettingsWebViewGtkHTML *extension)
-{
- GString *buffer;
- gchar *citation_color;
- gchar *monospace_font;
- gchar *spell_color;
- gchar *variable_font;
- gboolean custom_fonts;
- gboolean mark_citations;
- EExtensible *extensible;
- GtkStyleContext *style_context;
- GSettings *settings;
- GError *error = NULL;
-
- /* Some of our mail and composer preferences are passed down to
- * GtkHtml through style properties, unfortunately. This builds
- * a style sheet for the EWebView using values from GSettings. */
-
- settings = extension->priv->settings;
-
- custom_fonts =
- g_settings_get_boolean (settings, "use-custom-font");
- monospace_font =
- g_settings_get_string (settings, "monospace-font");
- variable_font =
- g_settings_get_string (settings, "variable-width-font");
- mark_citations =
- g_settings_get_boolean (settings, "mark-citations");
- citation_color =
- g_settings_get_string (settings, "citation-color");
- spell_color =
- g_settings_get_string (settings, "composer-spell-color");
-
- buffer = g_string_new ("EWebViewGtkHTML {\n");
-
- settings_web_view_gtkhtml_fix_color_string (citation_color);
- settings_web_view_gtkhtml_fix_color_string (spell_color);
-
- if (custom_fonts && variable_font != NULL)
- g_string_append_printf (
- buffer, " font: %s;\n", variable_font);
-
- if (custom_fonts && monospace_font != NULL)
- g_string_append_printf (
- buffer, " -GtkHTML-fixed-font-name: '%s';\n",
- monospace_font);
-
- if (mark_citations && citation_color != NULL)
- g_string_append_printf (
- buffer, " -GtkHTML-cite-color: %s;\n",
- citation_color);
-
- if (spell_color != NULL)
- g_string_append_printf (
- buffer, " -GtkHTML-spell-error-color: %s;\n",
- spell_color);
-
- g_string_append (buffer, "}\n");
-
- gtk_css_provider_load_from_data (
- extension->priv->css_provider,
- buffer->str, buffer->len, &error);
-
- if (error != NULL) {
- g_warning ("%s", error->message);
- g_error_free (error);
- }
-
- g_string_free (buffer, TRUE);
-
- g_free (monospace_font);
- g_free (variable_font);
- g_free (citation_color);
- g_free (spell_color);
-
- extensible = e_extension_get_extensible (E_EXTENSION (extension));
- style_context = gtk_widget_get_style_context (GTK_WIDGET (extensible));
- gtk_style_context_invalidate (style_context);
-}
-
-static void
-settings_web_view_gtkhtml_changed_cb (GSettings *settings,
- const gchar *key,
- ESettingsWebViewGtkHTML *extension)
-{
- GVariant *new_value, *old_value;
-
- new_value = g_settings_get_value (settings, key);
- old_value = g_hash_table_lookup (extension->priv->old_values, key);
-
- if (!new_value || !old_value || !g_variant_equal (new_value, old_value)) {
- if (new_value)
- g_hash_table_insert (extension->priv->old_values, g_strdup (key), new_value);
- else
- g_hash_table_remove (extension->priv->old_values, key);
-
- settings_web_view_gtkhtml_load_style (extension);
- } else if (new_value) {
- g_variant_unref (new_value);
- }
-}
-
-static void
-settings_web_view_gtkhtml_realize (GtkWidget *widget,
- ESettingsWebViewGtkHTML *extension)
-{
- GSettings *settings;
-
- settings = extension->priv->settings;
-
- g_settings_bind (
- settings, "composer-inline-spelling",
- widget, "inline-spelling",
- G_SETTINGS_BIND_GET);
-
- g_settings_bind (
- settings, "composer-magic-links",
- widget, "magic-links",
- G_SETTINGS_BIND_GET);
-
- g_settings_bind (
- settings, "composer-magic-smileys",
- widget, "magic-smileys",
- G_SETTINGS_BIND_GET);
-
- gtk_style_context_add_provider (
- gtk_widget_get_style_context (widget),
- GTK_STYLE_PROVIDER (extension->priv->css_provider),
- GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
-
- settings_web_view_gtkhtml_load_style (extension);
-
- /* Reload the style sheet when certain settings change. */
-
- g_signal_connect (
- settings, "changed::use-custom-font",
- G_CALLBACK (settings_web_view_gtkhtml_changed_cb),
- extension);
-
- g_signal_connect (
- settings, "changed::monospace-font",
- G_CALLBACK (settings_web_view_gtkhtml_changed_cb),
- extension);
-
- g_signal_connect (
- settings, "changed::variable-width-font",
- G_CALLBACK (settings_web_view_gtkhtml_changed_cb),
- extension);
-
- g_signal_connect (
- settings, "changed::mark-citations",
- G_CALLBACK (settings_web_view_gtkhtml_changed_cb),
- extension);
-
- g_signal_connect (
- settings, "changed::citation-color",
- G_CALLBACK (settings_web_view_gtkhtml_changed_cb),
- extension);
-
- g_signal_connect (
- settings, "changed::composer-spell-color",
- G_CALLBACK (settings_web_view_gtkhtml_changed_cb),
- extension);
-}
-
-static void
-settings_web_view_gtkhtml_dispose (GObject *object)
-{
- ESettingsWebViewGtkHTMLPrivate *priv;
-
- priv = E_SETTINGS_WEB_VIEW_GTKHTML_GET_PRIVATE (object);
-
- if (priv->settings != NULL) {
- g_signal_handlers_disconnect_by_func (
- priv->settings,
- settings_web_view_gtkhtml_changed_cb, object);
- }
-
- if (priv->old_values) {
- g_hash_table_destroy (priv->old_values);
- priv->old_values = NULL;
- }
-
- g_clear_object (&priv->css_provider);
- g_clear_object (&priv->settings);
-
- /* Chain up to parent's dispose() method. */
- G_OBJECT_CLASS (e_settings_web_view_gtkhtml_parent_class)->
- dispose (object);
-}
-
-static void
-settings_web_view_gtkhtml_constructed (GObject *object)
-{
- EExtensible *extensible;
-
- extensible = e_extension_get_extensible (E_EXTENSION (object));
-
- /* Wait to bind settings until the EWebView is realized so
- * GtkhtmlEditor has a chance to install a GtkHTMLEditorAPI.
- * Otherwise our settings will have no effect. */
-
- g_signal_connect (
- extensible, "realize",
- G_CALLBACK (settings_web_view_gtkhtml_realize), object);
-
- /* Chain up to parent's constructed() method. */
- G_OBJECT_CLASS (e_settings_web_view_gtkhtml_parent_class)->
- constructed (object);
-}
-
-static void
-e_settings_web_view_gtkhtml_class_init (ESettingsWebViewGtkHTMLClass *class)
-{
- GObjectClass *object_class;
- EExtensionClass *extension_class;
-
- g_type_class_add_private (
- class, sizeof (ESettingsWebViewGtkHTMLPrivate));
-
- object_class = G_OBJECT_CLASS (class);
- object_class->dispose = settings_web_view_gtkhtml_dispose;
- object_class->constructed = settings_web_view_gtkhtml_constructed;
-
- extension_class = E_EXTENSION_CLASS (class);
- extension_class->extensible_type = E_TYPE_WEB_VIEW_GTKHTML;
-}
-
-static void
-e_settings_web_view_gtkhtml_class_finalize (ESettingsWebViewGtkHTMLClass *class)
-{
-}
-
-static void
-e_settings_web_view_gtkhtml_init (ESettingsWebViewGtkHTML *extension)
-{
- GSettings *settings;
-
- extension->priv =
- E_SETTINGS_WEB_VIEW_GTKHTML_GET_PRIVATE (extension);
-
- extension->priv->css_provider = gtk_css_provider_new ();
-
- settings = g_settings_new ("org.gnome.evolution.mail");
- extension->priv->settings = settings;
-
- extension->priv->old_values = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify) g_variant_unref);
-}
-
-void
-e_settings_web_view_gtkhtml_type_register (GTypeModule *type_module)
-{
- /* XXX G_DEFINE_DYNAMIC_TYPE declares a static type registration
- * function, so we have to wrap it with a public function in
- * order to register types from a separate compilation unit. */
- e_settings_web_view_gtkhtml_register_type (type_module);
-}
-
diff --git a/modules/settings/e-settings-web-view-gtkhtml.h b/modules/settings/e-settings-web-view-gtkhtml.h
deleted file mode 100644
index 7c406265e4..0000000000
--- a/modules/settings/e-settings-web-view-gtkhtml.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * e-settings-web-view-gtkhtml.h
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#ifndef E_SETTINGS_WEB_VIEW_GTKHTML_H
-#define E_SETTINGS_WEB_VIEW_GTKHTML_H
-
-#include <libebackend/libebackend.h>
-
-/* Standard GObject macros */
-#define E_TYPE_SETTINGS_WEB_VIEW_GTKHTML \
- (e_settings_web_view_gtkhtml_get_type ())
-#define E_SETTINGS_WEB_VIEW_GTKHTML(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST \
- ((obj), E_TYPE_SETTINGS_WEB_VIEW_GTKHTML, ESettingsWebViewGtkHTML))
-#define E_SETTINGS_WEB_VIEW_GTKHTML_CLASS(cls) \
- (G_TYPE_CHECK_CLASS_CAST \
- ((cls), E_TYPE_SETTINGS_WEB_VIEW_GTKHTML, ESettingsWebViewGtkHTMLClass))
-#define E_IS_SETTINGS_WEB_VIEW_GTKHTML(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE \
- ((obj), E_TYPE_SETTINGS_WEB_VIEW_GTKHTML))
-#define E_IS_SETTINGS_WEB_VIEW_GTKHTML_CLASS(cls) \
- (G_TYPE_CHECK_CLASS_TYPE \
- ((cls), E_TYPE_SETTINGS_WEB_VIEW_GTKHTML))
-#define E_SETTINGS_WEB_VIEW_GTKHTML_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS \
- ((obj), E_TYPE_SETTINGS_WEB_VIEW_GTKHTML, ESettingsWebViewGtkHTMLClass))
-
-G_BEGIN_DECLS
-
-typedef struct _ESettingsWebViewGtkHTML ESettingsWebViewGtkHTML;
-typedef struct _ESettingsWebViewGtkHTMLClass ESettingsWebViewGtkHTMLClass;
-typedef struct _ESettingsWebViewGtkHTMLPrivate ESettingsWebViewGtkHTMLPrivate;
-
-struct _ESettingsWebViewGtkHTML {
- EExtension parent;
- ESettingsWebViewGtkHTMLPrivate *priv;
-};
-
-struct _ESettingsWebViewGtkHTMLClass {
- EExtensionClass parent_class;
-};
-
-GType e_settings_web_view_gtkhtml_get_type
- (void) G_GNUC_CONST;
-void e_settings_web_view_gtkhtml_type_register
- (GTypeModule *type_module);
-
-G_END_DECLS
-
-#endif /* E_SETTINGS_WEB_VIEW_GTKHTML_H */
diff --git a/modules/settings/e-settings-web-view.c b/modules/settings/e-settings-web-view.c
index 0867b3c66d..ff804f36b4 100644
--- a/modules/settings/e-settings-web-view.c
+++ b/modules/settings/e-settings-web-view.c
@@ -31,7 +31,8 @@
((obj), E_TYPE_SETTINGS_WEB_VIEW, ESettingsWebViewPrivate))
struct _ESettingsWebViewPrivate {
- gint placeholder;
+ GtkCssProvider *css_provider;
+ GSettings *settings;
};
G_DEFINE_DYNAMIC_TYPE (
@@ -39,32 +40,194 @@ G_DEFINE_DYNAMIC_TYPE (
e_settings_web_view,
E_TYPE_EXTENSION)
+/* replaces content of color string */
static void
-settings_web_view_constructed (GObject *object)
+settings_web_view_fix_color_string (gchar *color_string)
{
- GSettings *settings;
+ GdkColor color;
+
+ if (color_string == NULL)
+ return;
+
+ if (strlen (color_string) < 13)
+ return;
+
+ if (!gdk_color_parse (color_string, &color))
+ return;
+
+ sprintf (
+ color_string, "#%02x%02x%02x",
+ (gint) color.red * 256 / 65536,
+ (gint) color.green * 256 / 65536,
+ (gint) color.blue * 256 / 65536);
+}
+
+static void
+settings_web_view_load_style (ESettingsWebView *extension)
+{
+ GString *buffer;
+ gchar *citation_color;
+ gchar *monospace_font;
+ gchar *variable_font;
+ gboolean custom_fonts;
+ gboolean mark_citations;
EExtensible *extensible;
+ GtkStyleContext *style_context;
+ GSettings *settings;
+ GError *error = NULL;
- extensible = e_extension_get_extensible (E_EXTENSION (object));
+ /* Some of our mail and composer preferences are passed down to
+ * GtkHtml through style properties, unfortunately. This builds
+ * a style sheet for the EWebView using values from GSettings. */
- settings = g_settings_new ("org.gnome.evolution.mail");
+ settings = extension->priv->settings;
+
+ custom_fonts =
+ g_settings_get_boolean (settings, "use-custom-font");
+ monospace_font =
+ g_settings_get_string (settings, "monospace-font");
+ variable_font =
+ g_settings_get_string (settings, "variable-width-font");
+ mark_citations =
+ g_settings_get_boolean (settings, "mark-citations");
+ citation_color =
+ g_settings_get_string (settings, "citation-color");
+
+ buffer = g_string_new ("EWebViewGtkHTML {\n");
+
+ settings_web_view_fix_color_string (citation_color);
+
+ if (custom_fonts && variable_font != NULL)
+ g_string_append_printf (
+ buffer, " font: %s;\n", variable_font);
+
+ if (custom_fonts && monospace_font != NULL)
+ g_string_append_printf (
+ buffer, " -GtkHTML-fixed-font-name: '%s';\n",
+ monospace_font);
+
+ if (mark_citations && citation_color != NULL)
+ g_string_append_printf (
+ buffer, " -GtkHTML-cite-color: %s;\n",
+ citation_color);
+
+ g_string_append (buffer, "}\n");
+
+ gtk_css_provider_load_from_data (
+ extension->priv->css_provider,
+ buffer->str, buffer->len, &error);
+
+ if (error != NULL) {
+ g_warning ("%s", error->message);
+ g_error_free (error);
+ }
+
+ g_string_free (buffer, TRUE);
+
+ g_free (monospace_font);
+ g_free (variable_font);
+ g_free (citation_color);
+
+ extensible = e_extension_get_extensible (E_EXTENSION (extension));
+ style_context = gtk_widget_get_style_context (GTK_WIDGET (extensible));
+ gtk_style_context_invalidate (style_context);
+}
+
+static void
+settings_web_view_changed_cb (GSettings *settings,
+ const gchar *key,
+ ESettingsWebView *extension)
+{
+ settings_web_view_load_style (extension);
+}
+
+static void
+settings_web_view_realize (GtkWidget *widget,
+ ESettingsWebView *extension)
+{
+ GSettings *settings;
+
+ settings = extension->priv->settings;
g_settings_bind (
settings, "composer-inline-spelling",
- extensible, "inline-spelling",
+ widget, "inline-spelling",
G_SETTINGS_BIND_GET);
g_settings_bind (
settings, "composer-magic-links",
- extensible, "magic-links",
+ widget, "magic-links",
G_SETTINGS_BIND_GET);
g_settings_bind (
settings, "composer-magic-smileys",
- extensible, "magic-smileys",
+ widget, "magic-smileys",
G_SETTINGS_BIND_GET);
- g_object_unref (settings);
+ gtk_style_context_add_provider (
+ gtk_widget_get_style_context (widget),
+ GTK_STYLE_PROVIDER (extension->priv->css_provider),
+ GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+
+ settings_web_view_load_style (extension);
+
+ /* Reload the style sheet when certain settings change. */
+
+ g_signal_connect (
+ settings, "changed::use-custom-font",
+ G_CALLBACK (settings_web_view_changed_cb), extension);
+
+ g_signal_connect (
+ settings, "changed::monospace-font",
+ G_CALLBACK (settings_web_view_changed_cb), extension);
+
+ g_signal_connect (
+ settings, "changed::variable-width-font",
+ G_CALLBACK (settings_web_view_changed_cb), extension);
+
+ g_signal_connect (
+ settings, "changed::mark-citations",
+ G_CALLBACK (settings_web_view_changed_cb), extension);
+
+ g_signal_connect (
+ settings, "changed::citation-color",
+ G_CALLBACK (settings_web_view_changed_cb), extension);
+}
+
+static void
+settings_web_view_dispose (GObject *object)
+{
+ ESettingsWebViewPrivate *priv;
+
+ priv = E_SETTINGS_WEB_VIEW_GET_PRIVATE (object);
+
+ if (priv->settings != NULL) {
+ g_signal_handlers_disconnect_by_func (
+ priv->settings,
+ settings_web_view_changed_cb, object);
+ }
+
+ g_clear_object (&priv->css_provider);
+ g_clear_object (&priv->settings);
+
+ /* Chain up to parent's dispose() method. */
+ G_OBJECT_CLASS (e_settings_web_view_parent_class)->dispose (object);
+}
+
+static void
+settings_web_view_constructed (GObject *object)
+{
+ EExtensible *extensible;
+
+ extensible = e_extension_get_extensible (E_EXTENSION (object));
+
+ /* Wait to bind settings until the EWebView is realized so
+ * GtkhtmlEditor has a chance to install a GtkHTMLEditorAPI.
+ * Otherwise our settings will have no effect. */
+
+ g_signal_connect (
+ extensible, "realize",
+ G_CALLBACK (settings_web_view_realize), object);
/* Chain up to parent's constructed() method. */
G_OBJECT_CLASS (e_settings_web_view_parent_class)->
@@ -80,6 +243,7 @@ e_settings_web_view_class_init (ESettingsWebViewClass *class)
g_type_class_add_private (class, sizeof (ESettingsWebViewPrivate));
object_class = G_OBJECT_CLASS (class);
+ object_class->dispose = settings_web_view_dispose;
object_class->constructed = settings_web_view_constructed;
extension_class = E_EXTENSION_CLASS (class);
@@ -94,7 +258,14 @@ e_settings_web_view_class_finalize (ESettingsWebViewClass *class)
static void
e_settings_web_view_init (ESettingsWebView *extension)
{
+ GSettings *settings;
+
extension->priv = E_SETTINGS_WEB_VIEW_GET_PRIVATE (extension);
+
+ extension->priv->css_provider = gtk_css_provider_new ();
+
+ settings = g_settings_new ("org.gnome.evolution.mail");
+ extension->priv->settings = settings;
}
void
diff --git a/modules/settings/evolution-module-settings.c b/modules/settings/evolution-module-settings.c
index af08158dde..88101b56c1 100644
--- a/modules/settings/evolution-module-settings.c
+++ b/modules/settings/evolution-module-settings.c
@@ -31,9 +31,9 @@
#include "e-settings-meeting-time-selector.h"
#include "e-settings-message-list.h"
#include "e-settings-name-selector-entry.h"
+#include "e-settings-spell-checker.h"
#include "e-settings-spell-entry.h"
#include "e-settings-web-view.h"
-#include "e-settings-web-view-gtkhtml.h"
#include "e-settings-weekday-chooser.h"
/* Module Entry Points */
@@ -59,9 +59,9 @@ e_module_load (GTypeModule *type_module)
e_settings_meeting_time_selector_type_register (type_module);
e_settings_message_list_type_register (type_module);
e_settings_name_selector_entry_type_register (type_module);
+ e_settings_spell_checker_type_register (type_module);
e_settings_spell_entry_type_register (type_module);
e_settings_web_view_type_register (type_module);
- e_settings_web_view_gtkhtml_type_register (type_module);
e_settings_weekday_chooser_type_register (type_module);
}