aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomas Popela <tpopela@redhat.com>2014-07-29 19:57:29 +0800
committerTomas Popela <tpopela@redhat.com>2014-07-29 20:03:22 +0800
commit37393c0da9a6c7d41c942c383b23e4f106a83225 (patch)
tree5186519a813418b2b3553a3d2d669fabd1770ff6
parentb6d99e982e2d5a1c18f0991570a42a1c4b6b7d2d (diff)
downloadgsoc2013-evolution-37393c0da9a6c7d41c942c383b23e4f106a83225.tar
gsoc2013-evolution-37393c0da9a6c7d41c942c383b23e4f106a83225.tar.gz
gsoc2013-evolution-37393c0da9a6c7d41c942c383b23e4f106a83225.tar.bz2
gsoc2013-evolution-37393c0da9a6c7d41c942c383b23e4f106a83225.tar.lz
gsoc2013-evolution-37393c0da9a6c7d41c942c383b23e4f106a83225.tar.xz
gsoc2013-evolution-37393c0da9a6c7d41c942c383b23e4f106a83225.tar.zst
gsoc2013-evolution-37393c0da9a6c7d41c942c383b23e4f106a83225.zip
Propagate settings from Prefences to the EHTMLEditorView
Namely "Use the same fonts as other applications", "Standard Font", "Fixed Width Font", "Highlight quotations with color", "Automatically insert emoticon images" and "Check spelling while I type". Also remove unneded properties from EWebView.
-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);
}