diff options
author | Tomas Popela <tpopela@redhat.com> | 2013-09-12 21:29:58 +0800 |
---|---|---|
committer | Tomas Popela <tpopela@redhat.com> | 2013-09-12 21:29:58 +0800 |
commit | 68f27ce0c8a3ed44d1f1105970cc68326df6bad3 (patch) | |
tree | cad3537983c28b85223ebb171301df1d8674f5e0 /mail | |
parent | b3fb5dfc8128fd903e702beeb96eae33de8aa993 (diff) | |
download | gsoc2013-evolution-68f27ce0c8a3ed44d1f1105970cc68326df6bad3.tar gsoc2013-evolution-68f27ce0c8a3ed44d1f1105970cc68326df6bad3.tar.gz gsoc2013-evolution-68f27ce0c8a3ed44d1f1105970cc68326df6bad3.tar.bz2 gsoc2013-evolution-68f27ce0c8a3ed44d1f1105970cc68326df6bad3.tar.lz gsoc2013-evolution-68f27ce0c8a3ed44d1f1105970cc68326df6bad3.tar.xz gsoc2013-evolution-68f27ce0c8a3ed44d1f1105970cc68326df6bad3.tar.zst gsoc2013-evolution-68f27ce0c8a3ed44d1f1105970cc68326df6bad3.zip |
Bug #706008 - Workaround gnome-shell style change on focus change
Avoid redrawing (thus loosing the selection and scroll position) of
preview window on style change by defining the colors through CSS styles.
On style change we just update the CSS color definitions and preview will
update itself without redraw.
Diffstat (limited to 'mail')
-rw-r--r-- | mail/e-mail-display.c | 101 |
1 files changed, 84 insertions, 17 deletions
diff --git a/mail/e-mail-display.c b/mail/e-mail-display.c index 9343ac01ba..919ba681a6 100644 --- a/mail/e-mail-display.c +++ b/mail/e-mail-display.c @@ -832,6 +832,60 @@ toggle_address_visibility (WebKitDOMElement *button, } static void +add_color_css_rule_for_web_view (EWebView *view, + const char *color_name, + const char *color_value) +{ + gchar *selector; + gchar *style; + + selector = g_strconcat (".-e-mail-formatter-", color_name, NULL); + + if (g_strstr_len (color_name, -1, "header")) + style = g_strconcat ("color: ", color_value, " !important;", NULL); + else if (g_strstr_len (color_name, -1, "frame")) + style = g_strconcat ("border-color: ", color_value, " !important;", NULL); + else + style = g_strconcat ("background-color: ", color_value, " !important;", NULL); + + e_web_view_add_css_rule_into_style_sheet ( + view, + "-e-mail-formatter-style-sheet", + selector, + style); + + g_free (style); + g_free (selector); +} + +static void +initialize_web_view_colors (EMailDisplay *display) +{ + EMailFormatter *formatter; + const gchar *color_names [] = { "body-color", "citation-color", + "frame-color", "header-color", NULL }; + gint ii; + + formatter = e_mail_display_get_formatter (display); + + for (ii = 0; color_names[ii]; ii++) { + GdkRGBA *color = NULL; + gchar *color_value; + + g_object_get (formatter, color_names[ii], &color, NULL); + color_value = g_strdup_printf ("#%06x", e_rgba_to_value (color)); + + add_color_css_rule_for_web_view ( + E_WEB_VIEW (display), + color_names[ii], + color_value); + + gdk_rgba_free (color); + g_free (color_value); + } +} + +static void setup_dom_bindings (GObject *object, GParamSpec *pspec, gpointer user_data) @@ -914,6 +968,7 @@ mail_parts_bind_dom (GObject *object, if (display->priv->part_list == NULL) return; + initialize_web_view_colors (display); frame_name = webkit_web_frame_get_name (frame); if (frame_name == NULL || *frame_name == '\0') frame_name = ".message.headers"; @@ -1535,6 +1590,30 @@ e_mail_display_init (EMailDisplay *display) } } +static void +e_mail_display_update_colors (EMailDisplay *display, + GParamSpec *param_spec, + EMailFormatter *formatter) +{ + GdkRGBA *color = NULL; + gchar *color_value; + + g_return_if_fail (E_IS_MAIL_DISPLAY (display)); + g_return_if_fail (E_IS_MAIL_FORMATTER (formatter)); + + g_object_get (formatter, param_spec->name, &color, NULL); + + color_value = g_strdup_printf ("#%06x", e_rgba_to_value (color)); + + add_color_css_rule_for_web_view ( + E_WEB_VIEW (display), + param_spec->name, + color_value); + + gdk_rgba_free (color); + g_free (color_value); +} + GtkWidget * e_mail_display_new (void) { @@ -1592,18 +1671,14 @@ e_mail_display_set_mode (EMailDisplay *display, G_CALLBACK (e_mail_display_reload), display, "swapped-object-signal::notify::animate-images", G_CALLBACK (e_mail_display_reload), display, - "swapped-object-signal::notify::text-color", - G_CALLBACK (e_mail_display_reload), display, "swapped-object-signal::notify::body-color", - G_CALLBACK (e_mail_display_reload), display, + G_CALLBACK (e_mail_display_update_colors), display, "swapped-object-signal::notify::citation-color", - G_CALLBACK (e_mail_display_reload), display, - "swapped-object-signal::notify::content-color", - G_CALLBACK (e_mail_display_reload), display, + G_CALLBACK (e_mail_display_update_colors), display, "swapped-object-signal::notify::frame-color", - G_CALLBACK (e_mail_display_reload), display, + G_CALLBACK (e_mail_display_update_colors), display, "swapped-object-signal::notify::header-color", - G_CALLBACK (e_mail_display_reload), display, + G_CALLBACK (e_mail_display_update_colors), display, "swapped-object-signal::need-redraw", G_CALLBACK (e_mail_display_reload), display, NULL); @@ -1854,7 +1929,7 @@ e_mail_display_set_status (EMailDisplay *display, "<meta name=\"generator\" content=\"Evolution Mail\"/>\n" "<title>Evolution Mail Display</title>\n" "</head>\n" - "<body bgcolor=\"#%06x\" text=\"#%06x\">" + "<body class=\"-e-web-view-background-color e-web-view-text-color\">" " <style>html, body { height: 100%%; }</style>\n" " <table border=\"0\" width=\"100%%\" height=\"100%%\">\n" " <tr height=\"100%%\" valign=\"middle\">\n" @@ -1865,14 +1940,6 @@ e_mail_display_set_status (EMailDisplay *display, " </table>\n" "</body>\n" "</html>\n", - e_rgba_to_value ( - e_mail_formatter_get_color ( - display->priv->formatter, - E_MAIL_FORMATTER_COLOR_CONTENT)), - e_rgba_to_value ( - e_mail_formatter_get_color ( - display->priv->formatter, - E_MAIL_FORMATTER_COLOR_TEXT)), status); e_web_view_load_string (E_WEB_VIEW (display), str); |