aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2013-04-23 20:59:09 +0800
committerMilan Crha <mcrha@redhat.com>2013-04-23 20:59:09 +0800
commitb064d64be7e2e9444721beb7a02038f638edab4c (patch)
tree35183e5a83eb22078db23835538ea9e07b4b6d2a
parentbd48b0a0f42696d2e8cb5eba10a3e0c123e9395d (diff)
downloadgsoc2013-evolution-b064d64be7e2e9444721beb7a02038f638edab4c.tar
gsoc2013-evolution-b064d64be7e2e9444721beb7a02038f638edab4c.tar.gz
gsoc2013-evolution-b064d64be7e2e9444721beb7a02038f638edab4c.tar.bz2
gsoc2013-evolution-b064d64be7e2e9444721beb7a02038f638edab4c.tar.lz
gsoc2013-evolution-b064d64be7e2e9444721beb7a02038f638edab4c.tar.xz
gsoc2013-evolution-b064d64be7e2e9444721beb7a02038f638edab4c.tar.zst
gsoc2013-evolution-b064d64be7e2e9444721beb7a02038f638edab4c.zip
[EMailFormatter] Use GdkRGBA and GtkStyleContext to get theme colors
It could happen that header text color had been picked white one time, but the other time black as expected (for me usually when I started Evolution in Calendar and moved to Mail view, the header text color was white, while when starting in Mail view it was black). The change to use GtkStyleContext is there only as a cleanup from deprecated GtkStyle, and to make things easier too, because both GtkStyle and the GtkStyleContext had set white color for some reason.
-rw-r--r--composer/e-msg-composer.c5
-rw-r--r--e-util/e-misc-utils.c4
-rw-r--r--e-util/e-misc-utils.h4
-rw-r--r--em-format/e-mail-formatter-error.c6
-rw-r--r--em-format/e-mail-formatter-headers.c8
-rw-r--r--em-format/e-mail-formatter-message-rfc822.c4
-rw-r--r--em-format/e-mail-formatter-print.c13
-rw-r--r--em-format/e-mail-formatter-source.c10
-rw-r--r--em-format/e-mail-formatter-text-enriched.c6
-rw-r--r--em-format/e-mail-formatter-text-html.c4
-rw-r--r--em-format/e-mail-formatter-text-plain.c10
-rw-r--r--em-format/e-mail-formatter.c106
-rw-r--r--em-format/e-mail-formatter.h16
-rw-r--r--mail/e-mail-display.c21
-rw-r--r--mail/em-utils.c5
-rw-r--r--modules/mail/em-mailer-prefs.c40
-rw-r--r--modules/settings/e-settings-mail-formatter.c14
-rw-r--r--modules/text-highlight/e-mail-formatter-text-highlight.c4
18 files changed, 137 insertions, 143 deletions
diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c
index 76aa82eacb..78419b7d14 100644
--- a/composer/e-msg-composer.c
+++ b/composer/e-msg-composer.c
@@ -218,10 +218,9 @@ emcu_part_to_html (EMsgComposer *composer,
formatter = e_mail_formatter_quote_new (
NULL, E_MAIL_FORMATTER_QUOTE_FLAG_KEEP_SIG);
- e_mail_formatter_set_style (
+ e_mail_formatter_update_style (
formatter,
- gtk_widget_get_style (GTK_WIDGET (window)),
- gtk_widget_get_state (GTK_WIDGET (window)));
+ gtk_widget_get_state_flags (GTK_WIDGET (window)));
e_mail_formatter_format_sync (
formatter, part_list, (CamelStream *) mem,
diff --git a/e-util/e-misc-utils.c b/e-util/e-misc-utils.c
index 97e5c2d37e..59e6e67eb2 100644
--- a/e-util/e-misc-utils.c
+++ b/e-util/e-misc-utils.c
@@ -1149,7 +1149,7 @@ e_int_compare (gconstpointer x,
* Returns: a 24-bit color value
**/
guint32
-e_color_to_value (GdkColor *color)
+e_color_to_value (const GdkColor *color)
{
GdkRGBA rgba;
@@ -1173,7 +1173,7 @@ e_color_to_value (GdkColor *color)
* Returns: a 24-bit color value
**/
guint32
-e_rgba_to_value (GdkRGBA *rgba)
+e_rgba_to_value (const GdkRGBA *rgba)
{
guint16 red;
guint16 green;
diff --git a/e-util/e-misc-utils.h b/e-util/e-misc-utils.h
index d7dea7afc3..1493d12d65 100644
--- a/e-util/e-misc-utils.h
+++ b/e-util/e-misc-utils.h
@@ -108,9 +108,9 @@ gint e_collate_compare (gconstpointer x,
gconstpointer y);
gint e_int_compare (gconstpointer x,
gconstpointer y);
-guint32 e_color_to_value (GdkColor *color);
+guint32 e_color_to_value (const GdkColor *color);
-guint32 e_rgba_to_value (GdkRGBA *rgba);
+guint32 e_rgba_to_value (const GdkRGBA *rgba);
/* This only makes a filename safe for usage as a filename.
* It still may have shell meta-characters in it. */
diff --git a/em-format/e-mail-formatter-error.c b/em-format/e-mail-formatter-error.c
index 6decb6409b..d5fd64b50d 100644
--- a/em-format/e-mail-formatter-error.c
+++ b/em-format/e-mail-formatter-error.c
@@ -66,13 +66,13 @@ emfe_error_format (EMailFormatterExtension *extension,
"<tr valign=\"top\"><td width=50>"
"<img src=\"gtk-stock://%s/?size=%d\" /></td>\n"
"<td style=\"color: red;\">",
- e_color_to_value ((GdkColor *)
+ e_rgba_to_value (
e_mail_formatter_get_color (
formatter, E_MAIL_FORMATTER_COLOR_FRAME)),
- e_color_to_value ((GdkColor *)
+ e_rgba_to_value (
e_mail_formatter_get_color (
formatter, E_MAIL_FORMATTER_COLOR_BODY)),
- e_color_to_value ((GdkColor *)
+ e_rgba_to_value (
e_mail_formatter_get_color (
formatter, E_MAIL_FORMATTER_COLOR_TEXT)),
GTK_STOCK_DIALOG_ERROR, GTK_ICON_SIZE_DIALOG);
diff --git a/em-format/e-mail-formatter-headers.c b/em-format/e-mail-formatter-headers.c
index ef86c21fc5..ab22e1a353 100644
--- a/em-format/e-mail-formatter-headers.c
+++ b/em-format/e-mail-formatter-headers.c
@@ -516,10 +516,10 @@ emfe_headers_format (EMailFormatterExtension *extension,
buffer = g_string_new ("");
if (context->mode == E_MAIL_FORMATTER_MODE_PRINTING) {
- GdkColor white = { 0, G_MAXUINT16, G_MAXUINT16, G_MAXUINT16 };
- bg_color = e_color_to_value (&white);
+ GdkRGBA white = { 1.0, 1.0, 1.0, 1.0};
+ bg_color = e_rgba_to_value (&white);
} else {
- bg_color = e_color_to_value ((GdkColor *)
+ bg_color = e_rgba_to_value (
e_mail_formatter_get_color (
formatter, E_MAIL_FORMATTER_COLOR_BODY));
}
@@ -531,7 +531,7 @@ emfe_headers_format (EMailFormatterExtension *extension,
"<tr><td valign=\"top\" width=\"16\">\n",
bg_color,
part->id,
- e_color_to_value ((GdkColor *)
+ e_rgba_to_value (
e_mail_formatter_get_color (
formatter,
E_MAIL_FORMATTER_COLOR_HEADER)));
diff --git a/em-format/e-mail-formatter-message-rfc822.c b/em-format/e-mail-formatter-message-rfc822.c
index f6e1a18cfc..8059e55e76 100644
--- a/em-format/e-mail-formatter-message-rfc822.c
+++ b/em-format/e-mail-formatter-message-rfc822.c
@@ -217,10 +217,10 @@ emfe_message_rfc822_format (EMailFormatterExtension *extension,
" id=\"%s.iframe\" "
" frameborder=\"0\" src=\"%s\" name=\"%s\"></iframe>"
"</div>",
- e_color_to_value ((GdkColor *)
+ e_rgba_to_value (
e_mail_formatter_get_color (
formatter, E_MAIL_FORMATTER_COLOR_FRAME)),
- e_color_to_value ((GdkColor *)
+ e_rgba_to_value (
e_mail_formatter_get_color (
formatter, E_MAIL_FORMATTER_COLOR_BODY)),
part->id, uri, part->id);
diff --git a/em-format/e-mail-formatter-print.c b/em-format/e-mail-formatter-print.c
index 7e15b93e0f..4d6487d526 100644
--- a/em-format/e-mail-formatter-print.c
+++ b/em-format/e-mail-formatter-print.c
@@ -175,22 +175,21 @@ mail_formatter_print_run (EMailFormatter *formatter,
}
static void
-mail_formatter_set_style (EMailFormatter *formatter,
- GtkStyle *style,
- GtkStateType state)
+mail_formatter_update_style (EMailFormatter *formatter,
+ GtkStateFlags state)
{
EMailFormatterClass *formatter_class;
/* White background */
- GdkColor body_color = { 0, G_MAXUINT16, G_MAXUINT16, G_MAXUINT16 };
+ GdkRGBA body_color = { 1.0, 1.0, 1.0, 1.0 };
/* Black text */
- GdkColor text_color = { 0, 0, 0, 0 };
+ GdkRGBA text_color = { 0.0, 0.0, 0.0, 0.0 };
g_object_freeze_notify (G_OBJECT (formatter));
/* Set the other colors */
formatter_class = E_MAIL_FORMATTER_CLASS (e_mail_formatter_print_parent_class);
- formatter_class->set_style (formatter, style, state);
+ formatter_class->update_style (formatter, state);
e_mail_formatter_set_color (
formatter, E_MAIL_FORMATTER_COLOR_FRAME, &body_color);
@@ -225,7 +224,7 @@ e_mail_formatter_print_class_init (EMailFormatterPrintClass *class)
formatter_class = E_MAIL_FORMATTER_CLASS (class);
formatter_class->run = mail_formatter_print_run;
- formatter_class->set_style = mail_formatter_set_style;
+ formatter_class->update_style = mail_formatter_update_style;
object_class = G_OBJECT_CLASS (class);
object_class->finalize = e_mail_formatter_print_finalize;
diff --git a/em-format/e-mail-formatter-source.c b/em-format/e-mail-formatter-source.c
index fed444e0f1..faa4c76521 100644
--- a/em-format/e-mail-formatter-source.c
+++ b/em-format/e-mail-formatter-source.c
@@ -72,10 +72,10 @@ emfe_source_format (EMailFormatterExtension *extension,
buffer,
"<div class=\"part-container\" "
"style=\"border: 0; background: #%06x; color: #%06x;\" >",
- e_color_to_value ((GdkColor *)
+ e_rgba_to_value (
e_mail_formatter_get_color (
formatter, E_MAIL_FORMATTER_COLOR_BODY)),
- e_color_to_value ((GdkColor *)
+ e_rgba_to_value (
e_mail_formatter_get_color (
formatter, E_MAIL_FORMATTER_COLOR_TEXT)));
} else {
@@ -84,13 +84,13 @@ emfe_source_format (EMailFormatterExtension *extension,
"<div class=\"part-container\" "
"style=\"border-color: #%06x; background: #%06x; color: #%06x;\">"
"<div class=\"part-container-inner-margin pre\">\n",
- e_color_to_value ((GdkColor *)
+ e_rgba_to_value (
e_mail_formatter_get_color (
formatter, E_MAIL_FORMATTER_COLOR_FRAME)),
- e_color_to_value ((GdkColor *)
+ e_rgba_to_value (
e_mail_formatter_get_color (
formatter, E_MAIL_FORMATTER_COLOR_BODY)),
- e_color_to_value ((GdkColor *)
+ e_rgba_to_value (
e_mail_formatter_get_color (
formatter, E_MAIL_FORMATTER_COLOR_TEXT)));
}
diff --git a/em-format/e-mail-formatter-text-enriched.c b/em-format/e-mail-formatter-text-enriched.c
index 988579e7cd..3859558aaf 100644
--- a/em-format/e-mail-formatter-text-enriched.c
+++ b/em-format/e-mail-formatter-text-enriched.c
@@ -76,11 +76,11 @@ emfe_text_enriched_format (EMailFormatterExtension *extension,
"<div class=\"part-container\" style=\"border-color: #%06x; "
"background-color: #%06x; color: #%06x;\">"
"<div class=\"part-container-inner-margin\">\n",
- e_color_to_value ((GdkColor *)
+ e_rgba_to_value (
e_mail_formatter_get_color (formatter, E_MAIL_FORMATTER_COLOR_FRAME)),
- e_color_to_value ((GdkColor *)
+ e_rgba_to_value (
e_mail_formatter_get_color (formatter, E_MAIL_FORMATTER_COLOR_CONTENT)),
- e_color_to_value ((GdkColor *)
+ e_rgba_to_value (
e_mail_formatter_get_color (formatter, E_MAIL_FORMATTER_COLOR_TEXT)));
camel_stream_write_string (stream, buffer->str, cancellable, NULL);
diff --git a/em-format/e-mail-formatter-text-html.c b/em-format/e-mail-formatter-text-html.c
index 8e9a6a6d0e..2b8eb567ee 100644
--- a/em-format/e-mail-formatter-text-html.c
+++ b/em-format/e-mail-formatter-text-html.c
@@ -331,10 +331,10 @@ emfe_text_html_format (EMailFormatterExtension *extension,
uri,
part->id,
part->id,
- e_color_to_value ((GdkColor *)
+ e_rgba_to_value (
e_mail_formatter_get_color (
formatter, E_MAIL_FORMATTER_COLOR_FRAME)),
- e_color_to_value ((GdkColor *)
+ e_rgba_to_value (
e_mail_formatter_get_color (
formatter, E_MAIL_FORMATTER_COLOR_CONTENT)));
diff --git a/em-format/e-mail-formatter-text-plain.c b/em-format/e-mail-formatter-text-plain.c
index bf83e166dd..122c566cf0 100644
--- a/em-format/e-mail-formatter-text-plain.c
+++ b/em-format/e-mail-formatter-text-plain.c
@@ -93,7 +93,7 @@ emfe_text_plain_format (EMailFormatterExtension *extension,
&& !g_ascii_strcasecmp (format, "flowed"))
flags |= CAMEL_MIME_FILTER_TOHTML_FORMAT_FLOWED;
- rgb = e_color_to_value ((GdkColor *)
+ rgb = e_rgba_to_value (
e_mail_formatter_get_color (
formatter, E_MAIL_FORMATTER_COLOR_CITATION));
@@ -107,10 +107,10 @@ emfe_text_plain_format (EMailFormatterExtension *extension,
"<div class=\"part-container pre\" style=\""
"border: none; padding: 8px; margin: 0; "
"background-color: #%06x; color: #%06x;\">\n",
- e_color_to_value ((GdkColor *)
+ e_rgba_to_value (
e_mail_formatter_get_color (
formatter, E_MAIL_FORMATTER_COLOR_CONTENT)),
- e_color_to_value ((GdkColor *)
+ e_rgba_to_value (
e_mail_formatter_get_color (
formatter, E_MAIL_FORMATTER_COLOR_TEXT)));
@@ -164,10 +164,10 @@ emfe_text_plain_format (EMailFormatterExtension *extension,
"</iframe>"
"</div>",
part->id, part->id, uri,
- e_color_to_value ((GdkColor *)
+ e_rgba_to_value (
e_mail_formatter_get_color (
formatter, E_MAIL_FORMATTER_COLOR_FRAME)),
- e_color_to_value ((GdkColor *)
+ e_rgba_to_value (
e_mail_formatter_get_color (
formatter, E_MAIL_FORMATTER_COLOR_CONTENT)));
diff --git a/em-format/e-mail-formatter.c b/em-format/e-mail-formatter.c
index ad62320eee..95eacaaed7 100644
--- a/em-format/e-mail-formatter.c
+++ b/em-format/e-mail-formatter.c
@@ -466,34 +466,42 @@ mail_formatter_run (EMailFormatter *formatter,
}
static void
-mail_formatter_set_style (EMailFormatter *formatter,
- GtkStyle *style,
- GtkStateType state)
+mail_formatter_update_style (EMailFormatter *formatter,
+ GtkStateFlags state)
{
- GdkColor *color;
- EMailFormatterColorType type;
+ GtkStyleContext *style_context;
+ GtkWidgetPath *widget_path;
+ GdkRGBA rgba;
g_object_freeze_notify (G_OBJECT (formatter));
- color = &style->bg[state];
- type = E_MAIL_FORMATTER_COLOR_BODY;
- e_mail_formatter_set_color (formatter, type, color);
+ /* derive colors from top-level window */
+ style_context = gtk_style_context_new ();
+ widget_path = gtk_widget_path_new ();
+ gtk_widget_path_append_type (widget_path, GTK_TYPE_WINDOW);
+ gtk_style_context_set_path (style_context, widget_path);
- color = &style->base[GTK_STATE_NORMAL];
- type = E_MAIL_FORMATTER_COLOR_CONTENT;
- e_mail_formatter_set_color (formatter, type, color);
+ gtk_style_context_get_background_color (style_context, state, &rgba);
+ e_mail_formatter_set_color (formatter, E_MAIL_FORMATTER_COLOR_BODY, &rgba);
- color = &style->dark[state];
- type = E_MAIL_FORMATTER_COLOR_FRAME;
- e_mail_formatter_set_color (formatter, type, color);
+ rgba.red *= 0.8;
+ rgba.green *= 0.8;
+ rgba.blue *= 0.8;
+ e_mail_formatter_set_color (formatter, E_MAIL_FORMATTER_COLOR_FRAME, &rgba);
- color = &style->fg[state];
- type = E_MAIL_FORMATTER_COLOR_HEADER;
- e_mail_formatter_set_color (formatter, type, color);
+ gtk_style_context_get_color (style_context, state, &rgba);
+ e_mail_formatter_set_color (formatter, E_MAIL_FORMATTER_COLOR_HEADER, &rgba);
- color = &style->text[state];
- type = E_MAIL_FORMATTER_COLOR_TEXT;
- e_mail_formatter_set_color (formatter, type, color);
+ gtk_style_context_add_class (style_context, GTK_STYLE_CLASS_ENTRY);
+
+ gtk_style_context_get_background_color (style_context, state | GTK_STATE_FLAG_FOCUSED, &rgba);
+ e_mail_formatter_set_color (formatter, E_MAIL_FORMATTER_COLOR_CONTENT, &rgba);
+
+ gtk_style_context_get_color (style_context, state | GTK_STATE_FLAG_FOCUSED, &rgba);
+ e_mail_formatter_set_color (formatter, E_MAIL_FORMATTER_COLOR_TEXT, &rgba);
+
+ gtk_widget_path_free (widget_path);
+ g_object_unref (style_context);
g_object_thaw_notify (G_OBJECT (formatter));
}
@@ -542,7 +550,7 @@ static void
e_mail_formatter_class_init (EMailFormatterClass *class)
{
GObjectClass *object_class;
- GdkColor *color;
+ GdkRGBA *rgba;
e_mail_formatter_parent_class = g_type_class_peek_parent (class);
g_type_class_add_private (class, sizeof (EMailFormatterPrivate));
@@ -555,22 +563,22 @@ e_mail_formatter_class_init (EMailFormatterClass *class)
class->context_size = sizeof (EMailFormatterContext);
class->run = mail_formatter_run;
- class->set_style = mail_formatter_set_style;
+ class->update_style = mail_formatter_update_style;
- color = &class->colors[E_MAIL_FORMATTER_COLOR_BODY];
- gdk_color_parse ("#eeeeee", color);
+ rgba = &class->colors[E_MAIL_FORMATTER_COLOR_BODY];
+ gdk_rgba_parse (rgba, "#eeeeee");
- color = &class->colors[E_MAIL_FORMATTER_COLOR_CONTENT];
- gdk_color_parse ("#ffffff", color);
+ rgba = &class->colors[E_MAIL_FORMATTER_COLOR_CONTENT];
+ gdk_rgba_parse (rgba, "#ffffff");
- color = &class->colors[E_MAIL_FORMATTER_COLOR_FRAME];
- gdk_color_parse ("#3f3f3f", color);
+ rgba = &class->colors[E_MAIL_FORMATTER_COLOR_FRAME];
+ gdk_rgba_parse (rgba, "#3f3f3f");
- color = &class->colors[E_MAIL_FORMATTER_COLOR_HEADER];
- gdk_color_parse ("#eeeeee", color);
+ rgba = &class->colors[E_MAIL_FORMATTER_COLOR_HEADER];
+ gdk_rgba_parse (rgba, "#eeeeee");
- color = &class->colors[E_MAIL_FORMATTER_COLOR_TEXT];
- gdk_color_parse ("#000000", color);
+ rgba = &class->colors[E_MAIL_FORMATTER_COLOR_TEXT];
+ gdk_rgba_parse (rgba, "#000000");
g_object_class_install_property (
object_class,
@@ -579,7 +587,7 @@ e_mail_formatter_class_init (EMailFormatterClass *class)
"body-color",
"Body Color",
NULL,
- GDK_TYPE_COLOR,
+ GDK_TYPE_RGBA,
G_PARAM_READWRITE));
g_object_class_install_property (
@@ -589,7 +597,7 @@ e_mail_formatter_class_init (EMailFormatterClass *class)
"citation-color",
"Citation Color",
NULL,
- GDK_TYPE_COLOR,
+ GDK_TYPE_RGBA,
G_PARAM_READWRITE));
g_object_class_install_property (
@@ -599,7 +607,7 @@ e_mail_formatter_class_init (EMailFormatterClass *class)
"content-color",
"Content Color",
NULL,
- GDK_TYPE_COLOR,
+ GDK_TYPE_RGBA,
G_PARAM_READWRITE));
g_object_class_install_property (
@@ -609,7 +617,7 @@ e_mail_formatter_class_init (EMailFormatterClass *class)
"frame-color",
"Frame Color",
NULL,
- GDK_TYPE_COLOR,
+ GDK_TYPE_RGBA,
G_PARAM_READWRITE));
g_object_class_install_property (
@@ -619,7 +627,7 @@ e_mail_formatter_class_init (EMailFormatterClass *class)
"header-color",
"Header Color",
NULL,
- GDK_TYPE_COLOR,
+ GDK_TYPE_RGBA,
G_PARAM_READWRITE));
g_object_class_install_property (
@@ -1067,13 +1075,13 @@ e_mail_formatter_get_html_header (EMailFormatter *formatter)
" table th { color: #%06x; font-weight: bold; }\n"
"</style>\n"
"</head><body bgcolor=\"#%06x\" text=\"#%06x\">",
- e_color_to_value ((GdkColor *)
+ e_rgba_to_value (
e_mail_formatter_get_color (
formatter, E_MAIL_FORMATTER_COLOR_HEADER)),
- e_color_to_value ((GdkColor *)
+ e_rgba_to_value (
e_mail_formatter_get_color (
formatter, E_MAIL_FORMATTER_COLOR_BODY)),
- e_color_to_value ((GdkColor *)
+ e_rgba_to_value (
e_mail_formatter_get_color (
formatter, E_MAIL_FORMATTER_COLOR_TEXT)));
}
@@ -1097,7 +1105,7 @@ e_mail_formatter_get_text_format_flags (EMailFormatter *formatter)
return E_MAIL_FORMATTER_GET_CLASS (formatter)->text_html_flags;
}
-const GdkColor *
+const GdkRGBA *
e_mail_formatter_get_color (EMailFormatter *formatter,
EMailFormatterColorType type)
{
@@ -1110,9 +1118,9 @@ e_mail_formatter_get_color (EMailFormatter *formatter,
void
e_mail_formatter_set_color (EMailFormatter *formatter,
EMailFormatterColorType type,
- const GdkColor *color)
+ const GdkRGBA *color)
{
- GdkColor *format_color;
+ GdkRGBA *format_color;
const gchar *property_name;
g_return_if_fail (E_IS_MAIL_FORMATTER (formatter));
@@ -1121,7 +1129,7 @@ e_mail_formatter_set_color (EMailFormatter *formatter,
format_color = &E_MAIL_FORMATTER_GET_CLASS (formatter)->colors[type];
- if (gdk_color_equal (color, format_color))
+ if (gdk_rgba_equal (color, format_color))
return;
format_color->red = color->red;
@@ -1155,19 +1163,17 @@ e_mail_formatter_set_color (EMailFormatter *formatter,
}
void
-e_mail_formatter_set_style (EMailFormatter *formatter,
- GtkStyle *style,
- GtkStateType state)
+e_mail_formatter_update_style (EMailFormatter *formatter,
+ GtkStateFlags state)
{
EMailFormatterClass *formatter_class;
g_return_if_fail (E_IS_MAIL_FORMATTER (formatter));
- g_return_if_fail (GTK_IS_STYLE (style));
formatter_class = E_MAIL_FORMATTER_GET_CLASS (formatter);
- g_return_if_fail (formatter_class->set_style != NULL);
+ g_return_if_fail (formatter_class->update_style != NULL);
- formatter_class->set_style (formatter, style, state);
+ formatter_class->update_style (formatter, state);
}
EMailImageLoadingPolicy
diff --git a/em-format/e-mail-formatter.h b/em-format/e-mail-formatter.h
index 93e5268950..2c7b144359 100644
--- a/em-format/e-mail-formatter.h
+++ b/em-format/e-mail-formatter.h
@@ -110,7 +110,7 @@ struct _EMailFormatterClass {
CamelMimeFilterToHTMLFlags text_html_flags;
/* Colors should apply globally */
- GdkColor colors[E_MAIL_FORMATTER_NUM_COLOR_TYPES];
+ GdkRGBA colors[E_MAIL_FORMATTER_NUM_COLOR_TYPES];
/* sizeof(EMailFormatterContext) or some derivative struct */
gsize context_size;
@@ -120,9 +120,8 @@ struct _EMailFormatterClass {
CamelStream *stream,
GCancellable *cancellable);
- void (*set_style) (EMailFormatter *formatter,
- GtkStyle *style,
- GtkStateType state);
+ void (*update_style) (EMailFormatter *formatter,
+ GtkStateFlags state);
/* Signals */
void (*need_redraw) (EMailFormatter *formatter);
@@ -175,15 +174,14 @@ CamelMimeFilterToHTMLFlags
e_mail_formatter_get_text_format_flags
(EMailFormatter *formatter);
-const GdkColor *
+const GdkRGBA *
e_mail_formatter_get_color (EMailFormatter *formatter,
EMailFormatterColorType type);
void e_mail_formatter_set_color (EMailFormatter *efh,
EMailFormatterColorType type,
- const GdkColor *color);
-void e_mail_formatter_set_style (EMailFormatter *formatter,
- GtkStyle *style,
- GtkStateType state);
+ const GdkRGBA *color);
+void e_mail_formatter_update_style (EMailFormatter *formatter,
+ GtkStateFlags state);
EMailImageLoadingPolicy
e_mail_formatter_get_image_loading_policy
diff --git a/mail/e-mail-display.c b/mail/e-mail-display.c
index 6794b144a4..7f6063b07d 100644
--- a/mail/e-mail-display.c
+++ b/mail/e-mail-display.c
@@ -195,15 +195,11 @@ mail_display_image_exists_in_cache (const gchar *image_uri)
static void
mail_display_update_formatter_colors (EMailDisplay *display)
{
- GtkStyle *style;
- GtkStateType state;
-
if (display->priv->formatter == NULL)
return;
- style = gtk_widget_get_style (GTK_WIDGET (display));
- state = gtk_widget_get_state (GTK_WIDGET (display));
- e_mail_formatter_set_style (display->priv->formatter, style, state);
+ e_mail_formatter_update_style (display->priv->formatter,
+ gtk_widget_get_state_flags (GTK_WIDGET (display)));
}
static void
@@ -1371,16 +1367,15 @@ mail_display_realize (GtkWidget *widget)
}
static void
-mail_display_style_set (GtkWidget *widget,
- GtkStyle *previous_style)
+mail_display_style_updated (GtkWidget *widget)
{
EMailDisplay *display = E_MAIL_DISPLAY (widget);
mail_display_update_formatter_colors (display);
- /* Chain up to parent's style_set() method. */
+ /* Chain up to parent's style_updated() method. */
GTK_WIDGET_CLASS (e_mail_display_parent_class)->
- style_set (widget, previous_style);
+ style_updated (widget);
}
static gboolean
@@ -1490,7 +1485,7 @@ e_mail_display_class_init (EMailDisplayClass *class)
widget_class = GTK_WIDGET_CLASS (class);
widget_class->realize = mail_display_realize;
- widget_class->style_set = mail_display_style_set;
+ widget_class->style_updated = mail_display_style_updated;
widget_class->button_press_event = mail_display_button_press_event;
web_view_class = E_WEB_VIEW_CLASS (class);
@@ -1971,11 +1966,11 @@ e_mail_display_set_status (EMailDisplay *display,
" </table>\n"
"</body>\n"
"</html>\n",
- e_color_to_value ((GdkColor *)
+ e_rgba_to_value (
e_mail_formatter_get_color (
display->priv->formatter,
E_MAIL_FORMATTER_COLOR_CONTENT)),
- e_color_to_value ((GdkColor *)
+ e_rgba_to_value (
e_mail_formatter_get_color (
display->priv->formatter,
E_MAIL_FORMATTER_COLOR_TEXT)),
diff --git a/mail/em-utils.c b/mail/em-utils.c
index 0da08fa324..052af8c5ae 100644
--- a/mail/em-utils.c
+++ b/mail/em-utils.c
@@ -1284,9 +1284,8 @@ em_utils_message_to_html (CamelSession *session,
camel_stream_mem_set_byte_array (CAMEL_STREAM_MEM (mem), buf);
formatter = e_mail_formatter_quote_new (credits, flags);
- e_mail_formatter_set_style (formatter,
- gtk_widget_get_style (GTK_WIDGET (window)),
- gtk_widget_get_state (GTK_WIDGET (window)));
+ e_mail_formatter_update_style (formatter,
+ gtk_widget_get_state_flags (GTK_WIDGET (window)));
if (parts_list == NULL) {
GSettings *settings;
diff --git a/modules/mail/em-mailer-prefs.c b/modules/mail/em-mailer-prefs.c
index fc3e3c4e66..3eedb6a816 100644
--- a/modules/mail/em-mailer-prefs.c
+++ b/modules/mail/em-mailer-prefs.c
@@ -146,17 +146,17 @@ mailer_prefs_map_seconds_to_milliseconds (const GValue *value,
}
static gboolean
-mailer_prefs_map_string_to_color (GValue *value,
- GVariant *variant,
- gpointer user_data)
+mailer_prefs_map_string_to_rgba (GValue *value,
+ GVariant *variant,
+ gpointer user_data)
{
- GdkColor color;
+ GdkRGBA rgba;
const gchar *string;
gboolean success = FALSE;
string = g_variant_get_string (variant, NULL);
- if (gdk_color_parse (string, &color)) {
- g_value_set_boxed (value, &color);
+ if (gdk_rgba_parse (&rgba, string)) {
+ g_value_set_boxed (value, &rgba);
success = TRUE;
}
@@ -164,27 +164,25 @@ mailer_prefs_map_string_to_color (GValue *value,
}
static GVariant *
-mailer_prefs_map_color_to_string (const GValue *value,
- const GVariantType *expected_type,
- gpointer user_data)
+mailer_prefs_map_rgba_to_string (const GValue *value,
+ const GVariantType *expected_type,
+ gpointer user_data)
{
GVariant *variant;
- const GdkColor *color;
+ const GdkRGBA *rgba;
- color = g_value_get_boxed (value);
- if (color == NULL) {
+ rgba = g_value_get_boxed (value);
+ if (rgba == NULL) {
variant = g_variant_new_string ("");
} else {
gchar *string;
- /* Encode the color manually because CSS styles expect
- * color codes as #rrggbb, whereas gdk_color_to_string()
- * returns color codes as #rrrrggggbbbb. */
+ /* Encode the color manually. */
string = g_strdup_printf (
"#%02x%02x%02x",
- (gint) color->red * 256 / 65536,
- (gint) color->green * 256 / 65536,
- (gint) color->blue * 256 / 65536);
+ ((gint) (rgba->red * 255)) % 255,
+ ((gint) (rgba->green * 255)) % 255,
+ ((gint) (rgba->blue * 255)) % 255);
variant = g_variant_new_string (string);
g_free (string);
}
@@ -934,10 +932,10 @@ em_mailer_prefs_construct (EMMailerPrefs *prefs,
widget = e_builder_get_widget (prefs->builder, "colorButtonHighlightCitations");
g_settings_bind_with_mapping (
settings, "citation-color",
- widget, "color",
+ widget, "rgba",
G_SETTINGS_BIND_DEFAULT,
- mailer_prefs_map_string_to_color,
- mailer_prefs_map_color_to_string,
+ mailer_prefs_map_string_to_rgba,
+ mailer_prefs_map_rgba_to_string,
NULL, (GDestroyNotify) NULL);
g_settings_bind (
settings, "mark-citations",
diff --git a/modules/settings/e-settings-mail-formatter.c b/modules/settings/e-settings-mail-formatter.c
index e98bf42ec5..aa8c4325a1 100644
--- a/modules/settings/e-settings-mail-formatter.c
+++ b/modules/settings/e-settings-mail-formatter.c
@@ -51,17 +51,17 @@ settings_mail_formatter_get_extensible (ESettingsMailFormatter *extension)
}
static gboolean
-settings_mail_formatter_map_string_to_color (GValue *value,
- GVariant *variant,
- gpointer user_data)
+settings_mail_formatter_map_string_to_rgba (GValue *value,
+ GVariant *variant,
+ gpointer user_data)
{
- GdkColor color;
+ GdkRGBA rgba;
const gchar *string;
gboolean success = FALSE;
string = g_variant_get_string (variant, NULL);
- if (gdk_color_parse (string, &color)) {
- g_value_set_boxed (value, &color);
+ if (gdk_rgba_parse (&rgba, string)) {
+ g_value_set_boxed (value, &rgba);
success = TRUE;
}
@@ -138,7 +138,7 @@ settings_mail_formatter_constructed (GObject *object)
settings, "citation-color",
formatter, "citation-color",
G_SETTINGS_BIND_GET,
- settings_mail_formatter_map_string_to_color,
+ settings_mail_formatter_map_string_to_rgba,
(GSettingsBindSetMapping) NULL,
NULL, (GDestroyNotify) NULL);
diff --git a/modules/text-highlight/e-mail-formatter-text-highlight.c b/modules/text-highlight/e-mail-formatter-text-highlight.c
index f1a97b34a9..d4ef3693f1 100644
--- a/modules/text-highlight/e-mail-formatter-text-highlight.c
+++ b/modules/text-highlight/e-mail-formatter-text-highlight.c
@@ -325,10 +325,10 @@ emfe_text_highlight_format (EMailFormatterExtension *extension,
"</iframe>"
"</div>",
part->id, part->id, uri,
- e_color_to_value ((GdkColor *)
+ e_rgba_to_value (
e_mail_formatter_get_color (
formatter, E_MAIL_FORMATTER_COLOR_FRAME)),
- e_color_to_value ((GdkColor *)
+ e_rgba_to_value (
e_mail_formatter_get_color (
formatter, E_MAIL_FORMATTER_COLOR_CONTENT)));