diff --git a/e-util/e-util.c b/e-util/e-util.c index cd48984..d5d6e65 100644 --- a/e-util/e-util.c +++ b/e-util/e-util.c @@ -1390,9 +1390,19 @@ e_binding_transform_color_to_string (GBinding *binding, g_return_val_if_fail (G_IS_BINDING (binding), FALSE); color = g_value_get_boxed (source_value); - string = gdk_color_to_string (color); - g_value_set_string (target_value, string); - g_free (string); + if (!color) { + g_value_set_string (target_value, ""); + } else { + /* encode color manually, because css styles expect colors in #rrggbb, + not in #rrrrggggbbbb, which is a result of gdk_color_to_string() + */ + string = g_strdup_printf ("#%02x%02x%02x", + (gint) color->red * 256 / 65536, + (gint) color->green * 256 / 65536, + (gint) color->blue * 256 / 65536); + g_value_set_string (target_value, string); + g_free (string); + } return TRUE; } diff --git a/modules/mail/e-mail-config-web-view.c b/modules/mail/e-mail-config-web-view.c index ebab286..8f838b3 100644 --- a/modules/mail/e-mail-config-web-view.c +++ b/modules/mail/e-mail-config-web-view.c @@ -20,6 +20,9 @@ #include #endif +#include +#include + #include "e-mail-config-web-view.h" #include @@ -42,6 +45,24 @@ struct _EMailConfigWebViewClass { static gpointer parent_class; +/* replaces content of color string */ +static void +fix_color_string (gchar *color_string) +{ + GdkColor color; + + if (!color_string || 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 mail_config_web_view_load_style (EMailConfigWebView *extension) { @@ -78,13 +99,16 @@ mail_config_web_view_load_style (EMailConfigWebView *extension) buffer = g_string_new ("EWebView {\n"); + fix_color_string (citation_color); + 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", + buffer, " -GtkHTML-fixed-font-name: '%s';\n", monospace_font); if (mark_citations && citation_color != NULL) @@ -94,7 +118,7 @@ mail_config_web_view_load_style (EMailConfigWebView *extension) if (spell_color != NULL) g_string_append_printf ( - buffer, " -GtkHTML-spell-error-color: %s\n", + buffer, " -GtkHTML-spell-error-color: %s;\n", spell_color); g_string_append (buffer, "}\n"); @@ -113,6 +137,9 @@ mail_config_web_view_load_style (EMailConfigWebView *extension) g_free (variable_font); g_free (citation_color); g_free (spell_color); + + gtk_style_context_invalidate ( + gtk_widget_get_style_context (GTK_WIDGET (e_extension_get_extensible (E_EXTENSION (extension))))); } static void @@ -143,13 +170,13 @@ mail_config_web_view_realize (GtkWidget *widget, widget, "magic-smileys", G_BINDING_SYNC_CREATE); - mail_config_web_view_load_style (extension); - gtk_style_context_add_provider ( gtk_widget_get_style_context (widget), GTK_STYLE_PROVIDER (extension->css_provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); + mail_config_web_view_load_style (extension); + /* Reload the style sheet when certain settings change. */ g_signal_connect_swapped (