aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--e-util/e-html-editor-view.c101
-rw-r--r--e-util/e-web-view.c165
-rw-r--r--modules/settings/Makefile.am4
-rw-r--r--modules/settings/e-settings-html-editor-view.c218
-rw-r--r--modules/settings/e-settings-html-editor-view.h64
-rw-r--r--modules/settings/e-settings-web-view.c313
-rw-r--r--modules/settings/e-settings-web-view.h63
-rw-r--r--modules/settings/evolution-module-settings.c4
8 files changed, 358 insertions, 574 deletions
diff --git a/e-util/e-html-editor-view.c b/e-util/e-html-editor-view.c
index c46560f3b4..940f38eadb 100644
--- a/e-util/e-html-editor-view.c
+++ b/e-util/e-html-editor-view.c
@@ -80,6 +80,7 @@ struct _EHTMLEditorViewPrivate {
GHashTable *inline_images;
+ GSettings *mail_settings;
GSettings *font_settings;
GSettings *aliasing_settings;
@@ -239,6 +240,9 @@ e_html_editor_view_force_spell_check_for_current_paragraph (EHTMLEditorView *vie
WebKitDOMRange *end_range, *actual;
WebKitDOMText *text;
+ if (!view->priv->inline_spelling)
+ return;
+
document = webkit_web_view_get_dom_document (WEBKIT_WEB_VIEW (view));
window = webkit_dom_document_get_default_view (document);
dom_selection = webkit_dom_dom_window_get_selection (window);
@@ -431,7 +435,8 @@ e_html_editor_view_turn_spell_check_off (EHTMLEditorView *view)
void
e_html_editor_view_force_spell_check (EHTMLEditorView *view)
{
- refresh_spell_check (view, TRUE);
+ if (view->priv->inline_spelling)
+ refresh_spell_check (view, TRUE);
}
static gint
@@ -1158,6 +1163,9 @@ html_editor_view_load_status_changed (EHTMLEditorView *view)
if (view->priv->html_mode)
change_cid_images_src_to_base64 (view);
+
+ if (!view->priv->inline_spelling)
+ e_html_editor_view_turn_spell_check_off (view);
}
/* Based on original use_pictograms() from GtkHTML */
@@ -2044,21 +2052,23 @@ html_editor_view_dispose (GObject *object)
}
if (priv->aliasing_settings != NULL) {
- g_signal_handlers_disconnect_matched (
- priv->aliasing_settings, G_SIGNAL_MATCH_DATA,
- 0, 0, NULL, NULL, object);
+ g_signal_handlers_disconnect_by_data (priv->aliasing_settings, object);
g_object_unref (priv->aliasing_settings);
priv->aliasing_settings = NULL;
}
if (priv->font_settings != NULL) {
- g_signal_handlers_disconnect_matched (
- priv->font_settings, G_SIGNAL_MATCH_DATA,
- 0, 0, NULL, NULL, object);
+ g_signal_handlers_disconnect_by_data (priv->font_settings, object);
g_object_unref (priv->font_settings);
priv->font_settings = NULL;
}
+ if (priv->mail_settings != NULL) {
+ g_signal_handlers_disconnect_by_data (priv->mail_settings, object);
+ g_object_unref (priv->mail_settings);
+ priv->mail_settings = NULL;
+ }
+
g_hash_table_remove_all (priv->inline_images);
/* Chain up to parent's dispose() method. */
@@ -4646,6 +4656,9 @@ e_html_editor_view_init (EHTMLEditorView *view)
G_CALLBACK (e_html_editor_settings_changed_cb), view);
view->priv->font_settings = g_settings;
+ g_settings = g_settings_new ("org.gnome.evolution.mail");
+ view->priv->mail_settings = g_settings;
+
/* This schema is optional. Use if available. */
settings_schema = g_settings_schema_source_lookup (
g_settings_schema_source_get_default (),
@@ -6551,6 +6564,11 @@ e_html_editor_view_set_inline_spelling (EHTMLEditorView *view,
view->priv->inline_spelling = inline_spelling;
+ if (inline_spelling)
+ e_html_editor_view_force_spell_check (view);
+ else
+ e_html_editor_view_turn_spell_check_off (view);
+
g_object_notify (G_OBJECT (view), "inline-spelling");
}
@@ -6905,33 +6923,47 @@ citation_color_level_5 (void)
void
e_html_editor_view_update_fonts (EHTMLEditorView *view)
{
- GString *stylesheet;
- gchar *base64;
- gchar *aa = NULL;
- WebKitWebSettings *settings;
- PangoFontDescription *ms, *vw;
+ gboolean mark_citations, use_custom_font;
+ GdkColor *link = NULL;
+ GdkColor *visited = NULL;
+ gchar *base64, *font, *aa = NULL, *citation_color;
const gchar *styles[] = { "normal", "oblique", "italic" };
const gchar *smoothing = NULL;
+ GString *stylesheet;
GtkStyleContext *context;
- GdkColor *link = NULL;
- GdkColor *visited = NULL;
- gchar *font;
+ PangoFontDescription *ms, *vw;
+ WebKitWebSettings *settings;
- font = g_settings_get_string (
- view->priv->font_settings,
- "monospace-font-name");
- ms = pango_font_description_from_string (
- font ? font : "monospace 10");
- g_free (font);
+ g_return_if_fail (E_IS_HTML_EDITOR_VIEW (view));
- if (view->priv->html_mode) {
+ use_custom_font = g_settings_get_boolean (
+ view->priv->mail_settings, "use-custom-font");
+
+ if (use_custom_font) {
font = g_settings_get_string (
- view->priv->font_settings,
- "font-name");
- vw = pango_font_description_from_string (
- font ? font : "serif 10");
+ view->priv->mail_settings, "monospace-font");
+ ms = pango_font_description_from_string (font ? font : "monospace 10");
g_free (font);
} else {
+ font = g_settings_get_string (
+ view->priv->font_settings, "monospace-font-name");
+ ms = pango_font_description_from_string (font ? font : "monospace 10");
+ g_free (font);
+ }
+
+ if (view->priv->html_mode) {
+ if (use_custom_font) {
+ font = g_settings_get_string (
+ view->priv->mail_settings, "variable-width-font");
+ vw = pango_font_description_from_string (font ? font : "serif 10");
+ g_free (font);
+ } else {
+ font = g_settings_get_string (
+ view->priv->font_settings, "font-name");
+ vw = pango_font_description_from_string (font ? font : "serif 10");
+ g_free (font);
+ }
+ } else {
/* When in plain text mode, force monospace font */
vw = pango_font_description_copy (ms);
}
@@ -7092,6 +7124,11 @@ e_html_editor_view_update_fonts (EHTMLEditorView *view)
" -webkit-margin-after: 0em; \n"
"}\n");
+ citation_color = g_settings_get_string (
+ view->priv->mail_settings, "citation-color");
+ mark_citations = g_settings_get_boolean (
+ view->priv->mail_settings, "mark-citations");
+
g_string_append (
stylesheet,
"blockquote[type=cite] "
@@ -7099,9 +7136,15 @@ e_html_editor_view_update_fonts (EHTMLEditorView *view)
" padding: 0.0ex 0ex;\n"
" margin: 0ex;\n"
" -webkit-margin-start: 0em; \n"
- " -webkit-margin-end : 0em; \n"
- " color: #737373 !important;\n"
- "}\n");
+ " -webkit-margin-end : 0em; \n");
+
+ if (mark_citations && citation_color)
+ g_string_append_printf (
+ stylesheet,
+ " color: %s !important; \n",
+ citation_color);
+
+ g_string_append (stylesheet, "}\n");
g_string_append (
stylesheet,
diff --git a/e-util/e-web-view.c b/e-util/e-web-view.c
index fb644418db..ed8324c1b1 100644
--- a/e-util/e-web-view.c
+++ b/e-util/e-web-view.c
@@ -86,9 +86,6 @@ enum {
PROP_CURSOR_IMAGE_SRC,
PROP_DISABLE_PRINTING,
PROP_DISABLE_SAVE_TO_DISK,
- PROP_INLINE_SPELLING,
- PROP_MAGIC_LINKS,
- PROP_MAGIC_SMILEYS,
PROP_OPEN_PROXY,
PROP_PRINT_PROXY,
PROP_SAVE_AS_PROXY,
@@ -712,24 +709,6 @@ web_view_set_property (GObject *object,
g_value_get_boolean (value));
return;
- case PROP_INLINE_SPELLING:
- e_web_view_set_inline_spelling (
- E_WEB_VIEW (object),
- g_value_get_boolean (value));
- return;
-
- case PROP_MAGIC_LINKS:
- e_web_view_set_magic_links (
- E_WEB_VIEW (object),
- g_value_get_boolean (value));
- return;
-
- case PROP_MAGIC_SMILEYS:
- e_web_view_set_magic_smileys (
- E_WEB_VIEW (object),
- g_value_get_boolean (value));
- return;
-
case PROP_OPEN_PROXY:
e_web_view_set_open_proxy (
E_WEB_VIEW (object),
@@ -788,24 +767,6 @@ web_view_get_property (GObject *object,
E_WEB_VIEW (object)));
return;
- case PROP_INLINE_SPELLING:
- g_value_set_boolean (
- value, e_web_view_get_inline_spelling (
- E_WEB_VIEW (object)));
- return;
-
- case PROP_MAGIC_LINKS:
- g_value_set_boolean (
- value, e_web_view_get_magic_links (
- E_WEB_VIEW (object)));
- return;
-
- case PROP_MAGIC_SMILEYS:
- g_value_set_boolean (
- value, e_web_view_get_magic_smileys (
- E_WEB_VIEW (object)));
- return;
-
case PROP_OPEN_PROXY:
g_value_set_object (
value, e_web_view_get_open_proxy (
@@ -1522,36 +1483,6 @@ e_web_view_class_init (EWebViewClass *class)
g_object_class_install_property (
object_class,
- PROP_INLINE_SPELLING,
- g_param_spec_boolean (
- "inline-spelling",
- "Inline Spelling",
- NULL,
- FALSE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (
- object_class,
- PROP_MAGIC_LINKS,
- g_param_spec_boolean (
- "magic-links",
- "Magic Links",
- NULL,
- FALSE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (
- object_class,
- PROP_MAGIC_SMILEYS,
- g_param_spec_boolean (
- "magic-smileys",
- "Magic Smileys",
- NULL,
- FALSE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (
- object_class,
PROP_OPEN_PROXY,
g_param_spec_object (
"open-proxy",
@@ -2116,102 +2047,6 @@ e_web_view_set_editable (EWebView *web_view,
webkit_web_view_set_editable (WEBKIT_WEB_VIEW (web_view), editable);
}
-gboolean
-e_web_view_get_inline_spelling (EWebView *web_view)
-{
-#if 0 /* WEBKIT - XXX No equivalent property? */
- /* XXX This is just here to maintain symmetry
- * with e_web_view_set_inline_spelling(). */
-
- g_return_val_if_fail (E_IS_WEB_VIEW (web_view), FALSE);
-
- return gtk_html_get_inline_spelling (GTK_HTML (web_view));
-#endif
-
- return FALSE;
-}
-
-void
-e_web_view_set_inline_spelling (EWebView *web_view,
- gboolean inline_spelling)
-{
-#if 0 /* WEBKIT - XXX No equivalent property? */
- /* XXX GtkHTML does not utilize GObject properties as well
- * as it could. This just wraps gtk_html_set_inline_spelling()
- * so we get a "notify::inline-spelling" signal. */
-
- g_return_if_fail (E_IS_WEB_VIEW (web_view));
-
- gtk_html_set_inline_spelling (GTK_HTML (web_view), inline_spelling);
-
- g_object_notify (G_OBJECT (web_view), "inline-spelling");
-#endif
-}
-
-gboolean
-e_web_view_get_magic_links (EWebView *web_view)
-{
-#if 0 /* WEBKIT - XXX No equivalent property? */
- /* XXX This is just here to maintain symmetry
- * with e_web_view_set_magic_links(). */
-
- g_return_val_if_fail (E_IS_WEB_VIEW (web_view), FALSE);
-
- return gtk_html_get_magic_links (GTK_HTML (web_view));
-#endif
-
- return FALSE;
-}
-
-void
-e_web_view_set_magic_links (EWebView *web_view,
- gboolean magic_links)
-{
-#if 0 /* WEBKIT - XXX No equivalent property? */
- /* XXX GtkHTML does not utilize GObject properties as well
- * as it could. This just wraps gtk_html_set_magic_links()
- * so we can get a "notify::magic-links" signal. */
-
- g_return_if_fail (E_IS_WEB_VIEW (web_view));
-
- gtk_html_set_magic_links (GTK_HTML (web_view), magic_links);
-
- g_object_notify (G_OBJECT (web_view), "magic-links");
-#endif
-}
-
-gboolean
-e_web_view_get_magic_smileys (EWebView *web_view)
-{
-#if 0 /* WEBKIT - No equivalent property? */
- /* XXX This is just here to maintain symmetry
- * with e_web_view_set_magic_smileys(). */
-
- g_return_val_if_fail (E_IS_WEB_VIEW (web_view), FALSE);
-
- return gtk_html_get_magic_smileys (GTK_HTML (web_view));
-#endif
-
- return FALSE;
-}
-
-void
-e_web_view_set_magic_smileys (EWebView *web_view,
- gboolean magic_smileys)
-{
-#if 0 /* WEBKIT - No equivalent property? */
- /* XXX GtkHTML does not utilize GObject properties as well
- * as it could. This just wraps gtk_html_set_magic_smileys()
- * so we can get a "notify::magic-smileys" signal. */
-
- g_return_if_fail (E_IS_WEB_VIEW (web_view));
-
- gtk_html_set_magic_smileys (GTK_HTML (web_view), magic_smileys);
-
- g_object_notify (G_OBJECT (web_view), "magic-smileys");
-#endif
-}
-
const gchar *
e_web_view_get_selected_uri (EWebView *web_view)
{
diff --git a/modules/settings/Makefile.am b/modules/settings/Makefile.am
index c03253db9e..507ddc9daa 100644
--- a/modules/settings/Makefile.am
+++ b/modules/settings/Makefile.am
@@ -27,6 +27,8 @@ module_settings_la_SOURCES = \
e-settings-date-edit.h \
e-settings-deprecated.c \
e-settings-deprecated.h \
+ e-settings-html-editor-view.c \
+ e-settings-html-editor-view.h \
e-settings-mail-browser.c \
e-settings-mail-browser.h \
e-settings-mail-formatter.c \
@@ -49,8 +51,6 @@ module_settings_la_SOURCES = \
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-weekday-chooser.c \
e-settings-weekday-chooser.h \
$(NULL)
diff --git a/modules/settings/e-settings-html-editor-view.c b/modules/settings/e-settings-html-editor-view.c
new file mode 100644
index 0000000000..97a8c081be
--- /dev/null
+++ b/modules/settings/e-settings-html-editor-view.c
@@ -0,0 +1,218 @@
+/*
+ * e-settings-html-editor-web-view.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-html-editor-view.h"
+
+#include <e-util/e-util.h>
+
+#define E_SETTINGS_HTML_EDITOR_VIEW_GET_PRIVATE(obj) \
+ (G_TYPE_INSTANCE_GET_PRIVATE \
+ ((obj), E_TYPE_SETTINGS_HTML_EDITOR_VIEW, ESettingsHTMLEditorViewPrivate))
+
+struct _ESettingsHTMLEditorViewPrivate {
+ GSettings *settings;
+
+ GHashTable *old_settings;
+};
+
+G_DEFINE_DYNAMIC_TYPE (
+ ESettingsHTMLEditorView,
+ e_settings_html_editor_view,
+ E_TYPE_EXTENSION)
+
+static void
+settings_html_editor_view_load_style (ESettingsHTMLEditorView *extension)
+{
+ EExtensible *extensible;
+
+ extensible = e_extension_get_extensible (E_EXTENSION (extension));
+
+ e_html_editor_view_update_fonts (E_HTML_EDITOR_VIEW (extensible));
+}
+
+static void
+settings_html_editor_view_changed_cb (GSettings *settings,
+ const gchar *key,
+ ESettingsHTMLEditorView *extension)
+{
+ GVariant *new_value, *old_value;
+
+ new_value = g_settings_get_value (settings, key);
+ old_value = g_hash_table_lookup (extension->priv->old_settings, key);
+
+ if (!new_value || !old_value || !g_variant_equal (new_value, old_value)) {
+ if (new_value)
+ g_hash_table_insert (extension->priv->old_settings, g_strdup (key), new_value);
+ else
+ g_hash_table_remove (extension->priv->old_settings, key);
+
+ settings_html_editor_view_load_style (extension);
+ } else if (new_value) {
+ g_variant_unref (new_value);
+ }
+}
+
+static void
+settings_html_editor_view_realize (GtkWidget *widget,
+ ESettingsHTMLEditorView *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);
+
+ settings_html_editor_view_load_style (extension);
+
+ /* Reload the web view when certain settings change. */
+
+ g_signal_connect (
+ settings, "changed::use-custom-font",
+ G_CALLBACK (settings_html_editor_view_changed_cb), extension);
+
+ g_signal_connect (
+ settings, "changed::monospace-font",
+ G_CALLBACK (settings_html_editor_view_changed_cb), extension);
+
+ g_signal_connect (
+ settings, "changed::variable-width-font",
+ G_CALLBACK (settings_html_editor_view_changed_cb), extension);
+
+ g_signal_connect (
+ settings, "changed::mark-citations",
+ G_CALLBACK (settings_html_editor_view_changed_cb), extension);
+
+ g_signal_connect (
+ settings, "changed::citation-color",
+ G_CALLBACK (settings_html_editor_view_changed_cb), extension);
+}
+
+static void
+settings_html_editor_view_dispose (GObject *object)
+{
+ ESettingsHTMLEditorViewPrivate *priv;
+
+ priv = E_SETTINGS_HTML_EDITOR_VIEW_GET_PRIVATE (object);
+
+ if (priv->settings != NULL) {
+ g_signal_handlers_disconnect_by_func (
+ priv->settings,
+ settings_html_editor_view_changed_cb, object);
+ }
+
+ g_clear_object (&priv->settings);
+
+ /* Chain up to parent's dispose() method. */
+ G_OBJECT_CLASS (e_settings_html_editor_view_parent_class)->dispose (object);
+}
+
+static void
+settings_html_editor_view_finalize (GObject *object)
+{
+ ESettingsHTMLEditorViewPrivate *priv;
+
+ priv = E_SETTINGS_HTML_EDITOR_VIEW_GET_PRIVATE (object);
+
+ if (priv->old_settings) {
+ g_hash_table_destroy (priv->old_settings);
+ priv->old_settings = NULL;
+ }
+
+ /* Chain up to parent's finalize() method. */
+ G_OBJECT_CLASS (e_settings_html_editor_view_parent_class)->finalize (object);
+}
+
+static void
+settings_html_editor_view_constructed (GObject *object)
+{
+ EExtensible *extensible;
+
+ extensible = e_extension_get_extensible (E_EXTENSION (object));
+
+ g_signal_connect (
+ extensible, "realize",
+ G_CALLBACK (settings_html_editor_view_realize), object);
+
+ /* Chain up to parent's constructed() method. */
+ G_OBJECT_CLASS (e_settings_html_editor_view_parent_class)->constructed (object);
+}
+
+static void
+e_settings_html_editor_view_class_init (ESettingsHTMLEditorViewClass *class)
+{
+ GObjectClass *object_class;
+ EExtensionClass *extension_class;
+
+ g_type_class_add_private (class, sizeof (ESettingsHTMLEditorViewPrivate));
+
+ object_class = G_OBJECT_CLASS (class);
+ object_class->dispose = settings_html_editor_view_dispose;
+ object_class->finalize = settings_html_editor_view_finalize;
+ object_class->constructed = settings_html_editor_view_constructed;
+
+ extension_class = E_EXTENSION_CLASS (class);
+ extension_class->extensible_type = E_TYPE_HTML_EDITOR_VIEW;
+}
+
+static void
+e_settings_html_editor_view_class_finalize (ESettingsHTMLEditorViewClass *class)
+{
+}
+
+static void
+e_settings_html_editor_view_init (ESettingsHTMLEditorView *extension)
+{
+ GSettings *settings;
+
+ extension->priv = E_SETTINGS_HTML_EDITOR_VIEW_GET_PRIVATE (extension);
+
+ settings = g_settings_new ("org.gnome.evolution.mail");
+ extension->priv->settings = settings;
+
+ extension->priv->old_settings = g_hash_table_new_full (
+ g_str_hash, g_str_equal, g_free, (GDestroyNotify) g_variant_unref);
+}
+
+void
+e_settings_html_editor_view_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_html_editor_view_register_type (type_module);
+}
+
diff --git a/modules/settings/e-settings-html-editor-view.h b/modules/settings/e-settings-html-editor-view.h
new file mode 100644
index 0000000000..1848794fcc
--- /dev/null
+++ b/modules/settings/e-settings-html-editor-view.h
@@ -0,0 +1,64 @@
+/*
+ * e-settings-html-editor-view.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_HTML_EDITOR_VIEW_H
+#define E_SETTINGS_HTML_EDITOR_VIEW_H
+
+#include <libebackend/libebackend.h>
+
+/* Standard GObject macros */
+#define E_TYPE_SETTINGS_HTML_EDITOR_VIEW \
+ (e_settings_html_editor_view_get_type ())
+#define E_SETTINGS_HTML_EDITOR_VIEW(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST \
+ ((obj), E_TYPE_SETTINGS_HTML_EDITOR_VIEW, ESettingsHTMLEditorView))
+#define E_SETTINGS_HTML_EDITOR_VIEW_CLASS(cls) \
+ (G_TYPE_CHECK_CLASS_CAST \
+ ((cls), E_TYPE_SETTINGS_HTML_EDITOR_VIEW, ESettingsHTMLEditorViewClass))
+#define E_IS_SETTINGS_HTML_EDITOR_VIEW(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE \
+ ((obj), E_TYPE_SETTINGS_HTML_EDITOR_VIEW))
+#define E_IS_SETTINGS_HTML_EDITOR_VIEW_CLASS(cls) \
+ (G_TYPE_CHECK_CLASS_TYPE \
+ ((cls), E_TYPE_SETTINGS_HTML_EDITOR_VIEW))
+#define E_SETTINGS_HTML_EDITOR_VIEW_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS \
+ ((obj), E_TYPE_SETTINGS_HTML_EDITOR_VIEW, ESettingsHTMLEditorViewClass))
+
+G_BEGIN_DECLS
+
+typedef struct _ESettingsHTMLEditorView ESettingsHTMLEditorView;
+typedef struct _ESettingsHTMLEditorViewClass ESettingsHTMLEditorViewClass;
+typedef struct _ESettingsHTMLEditorViewPrivate ESettingsHTMLEditorViewPrivate;
+
+struct _ESettingsHTMLEditorView {
+ EExtension parent;
+ ESettingsHTMLEditorViewPrivate *priv;
+};
+
+struct _ESettingsHTMLEditorViewClass {
+ EExtensionClass parent_class;
+};
+
+GType e_settings_html_editor_view_get_type
+ (void) G_GNUC_CONST;
+void e_settings_html_editor_view_type_register
+ (GTypeModule *type_module);
+
+G_END_DECLS
+
+#endif /* E_SETTINGS_HTML_EDITOR_VIEW_H */
diff --git a/modules/settings/e-settings-web-view.c b/modules/settings/e-settings-web-view.c
deleted file mode 100644
index 06cabb63fe..0000000000
--- a/modules/settings/e-settings-web-view.c
+++ /dev/null
@@ -1,313 +0,0 @@
-/*
- * e-settings-web-view.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.h"
-
-#include <e-util/e-util.h>
-
-#define E_SETTINGS_WEB_VIEW_GET_PRIVATE(obj) \
- (G_TYPE_INSTANCE_GET_PRIVATE \
- ((obj), E_TYPE_SETTINGS_WEB_VIEW, ESettingsWebViewPrivate))
-
-struct _ESettingsWebViewPrivate {
- GtkCssProvider *css_provider;
- GSettings *settings;
-
- GHashTable *old_settings;
-};
-
-G_DEFINE_DYNAMIC_TYPE (
- ESettingsWebView,
- e_settings_web_view,
- E_TYPE_EXTENSION)
-
-/* replaces content of color string */
-static void
-settings_web_view_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_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;
-
- /* 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");
-
- 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)
-{
- GVariant *new_value, *old_value;
-
- new_value = g_settings_get_value (settings, key);
- old_value = g_hash_table_lookup (extension->priv->old_settings, key);
-
- if (!new_value || !old_value || !g_variant_equal (new_value, old_value)) {
- if (new_value)
- g_hash_table_insert (extension->priv->old_settings, g_strdup (key), new_value);
- else
- g_hash_table_remove (extension->priv->old_settings, key);
-
- settings_web_view_load_style (extension);
- } else if (new_value) {
- g_variant_unref (new_value);
- }
-}
-
-static void
-settings_web_view_realize (GtkWidget *widget,
- ESettingsWebView *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_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_finalize (GObject *object)
-{
- ESettingsWebViewPrivate *priv;
-
- priv = E_SETTINGS_WEB_VIEW_GET_PRIVATE (object);
-
- if (priv->old_settings) {
- g_hash_table_destroy (priv->old_settings);
- priv->old_settings = NULL;
- }
-
- /* Chain up to parent's finalize() method. */
- G_OBJECT_CLASS (e_settings_web_view_parent_class)->finalize (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)->constructed (object);
-}
-
-static void
-e_settings_web_view_class_init (ESettingsWebViewClass *class)
-{
- GObjectClass *object_class;
- EExtensionClass *extension_class;
-
- g_type_class_add_private (class, sizeof (ESettingsWebViewPrivate));
-
- object_class = G_OBJECT_CLASS (class);
- object_class->dispose = settings_web_view_dispose;
- object_class->finalize = settings_web_view_finalize;
- object_class->constructed = settings_web_view_constructed;
-
- extension_class = E_EXTENSION_CLASS (class);
- extension_class->extensible_type = E_TYPE_WEB_VIEW;
-}
-
-static void
-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;
-
- extension->priv->old_settings = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify) g_variant_unref);
-}
-
-void
-e_settings_web_view_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_register_type (type_module);
-}
-
diff --git a/modules/settings/e-settings-web-view.h b/modules/settings/e-settings-web-view.h
deleted file mode 100644
index 367262ce0e..0000000000
--- a/modules/settings/e-settings-web-view.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * e-settings-web-view.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_H
-#define E_SETTINGS_WEB_VIEW_H
-
-#include <libebackend/libebackend.h>
-
-/* Standard GObject macros */
-#define E_TYPE_SETTINGS_WEB_VIEW \
- (e_settings_web_view_get_type ())
-#define E_SETTINGS_WEB_VIEW(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST \
- ((obj), E_TYPE_SETTINGS_WEB_VIEW, ESettingsWebView))
-#define E_SETTINGS_WEB_VIEW_CLASS(cls) \
- (G_TYPE_CHECK_CLASS_CAST \
- ((cls), E_TYPE_SETTINGS_WEB_VIEW, ESettingsWebViewClass))
-#define E_IS_SETTINGS_WEB_VIEW(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE \
- ((obj), E_TYPE_SETTINGS_WEB_VIEW))
-#define E_IS_SETTINGS_WEB_VIEW_CLASS(cls) \
- (G_TYPE_CHECK_CLASS_TYPE \
- ((cls), E_TYPE_SETTINGS_WEB_VIEW))
-#define E_SETTINGS_WEB_VIEW_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS \
- ((obj), E_TYPE_SETTINGS_WEB_VIEW, ESettingsWebViewClass))
-
-G_BEGIN_DECLS
-
-typedef struct _ESettingsWebView ESettingsWebView;
-typedef struct _ESettingsWebViewClass ESettingsWebViewClass;
-typedef struct _ESettingsWebViewPrivate ESettingsWebViewPrivate;
-
-struct _ESettingsWebView {
- EExtension parent;
- ESettingsWebViewPrivate *priv;
-};
-
-struct _ESettingsWebViewClass {
- EExtensionClass parent_class;
-};
-
-GType e_settings_web_view_get_type (void) G_GNUC_CONST;
-void e_settings_web_view_type_register
- (GTypeModule *type_module);
-
-G_END_DECLS
-
-#endif /* E_SETTINGS_WEB_VIEW_H */
diff --git a/modules/settings/evolution-module-settings.c b/modules/settings/evolution-module-settings.c
index 88101b56c1..e6fce74d9b 100644
--- a/modules/settings/evolution-module-settings.c
+++ b/modules/settings/evolution-module-settings.c
@@ -22,6 +22,7 @@
#include "e-settings-comp-editor.h"
#include "e-settings-date-edit.h"
#include "e-settings-deprecated.h"
+#include "e-settings-html-editor-view.h"
#include "e-settings-mail-browser.h"
#include "e-settings-mail-formatter.h"
#include "e-settings-mail-part-headers.h"
@@ -33,7 +34,6 @@
#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-weekday-chooser.h"
/* Module Entry Points */
@@ -50,6 +50,7 @@ e_module_load (GTypeModule *type_module)
e_settings_comp_editor_type_register (type_module);
e_settings_date_edit_type_register (type_module);
e_settings_deprecated_type_register (type_module);
+ e_settings_html_editor_view_type_register (type_module);
e_settings_mail_browser_type_register (type_module);
e_settings_mail_formatter_type_register (type_module);
e_settings_mail_part_headers_type_register (type_module);
@@ -61,7 +62,6 @@ e_module_load (GTypeModule *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_weekday_chooser_type_register (type_module);
}