[evolution] Bug 778180 - CSS property for background of new mail in the message list
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution] Bug 778180 - CSS property for background of new mail in the message list
- Date: Tue, 7 Feb 2017 13:19:29 +0000 (UTC)
commit c0c06307400c6f85be2b41ef733f9392561c20ff
Author: Milan Crha <mcrha redhat com>
Date: Tue Feb 7 14:20:19 2017 +0100
Bug 778180 - CSS property for background of new mail in the message list
src/e-util/e-table-item.c | 16 ++++++++++
src/e-util/e-table-item.h | 4 ++
src/mail/message-list.c | 71 +++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 91 insertions(+), 0 deletions(-)
---
diff --git a/src/e-util/e-table-item.c b/src/e-util/e-table-item.c
index 0ef48b1..a28829a 100644
--- a/src/e-util/e-table-item.c
+++ b/src/e-util/e-table-item.c
@@ -90,6 +90,7 @@ enum {
STYLE_UPDATED,
SELECTION_MODEL_REMOVED,
SELECTION_MODEL_ADDED,
+ GET_BG_COLOR,
LAST_SIGNAL
};
@@ -343,6 +344,8 @@ eti_get_cell_background_color (ETableItem *eti,
e_utils_get_theme_color (canvas,
"theme_unfocused_selected_bg_color,theme_selected_bg_color",
E_UTILS_DEFAULT_THEME_UNFOCUSED_SELECTED_BG_COLOR, background);
} else {
e_utils_get_theme_color (canvas, "theme_base_color", E_UTILS_DEFAULT_THEME_BASE_COLOR,
background);
+
+ g_signal_emit (eti, eti_signals[GET_BG_COLOR], 0, row, col, background);
}
color_spec = e_cell_get_bg_color (ecell_view, row);
@@ -3404,6 +3407,19 @@ e_table_item_class_init (ETableItemClass *class)
G_TYPE_NONE, 1,
G_TYPE_POINTER);
+ eti_signals[GET_BG_COLOR] = g_signal_new (
+ "get-bg-color",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (ETableItemClass, get_bg_color),
+ NULL, NULL,
+ NULL,
+ G_TYPE_NONE, 3,
+ G_TYPE_INT, /* row */
+ G_TYPE_INT, /* col */
+ G_TYPE_POINTER /* GdkRGBA *background, but cannot be passed as
+ boxed, because it's used as (inout) argument */);
+
/* A11y Init */
gal_a11y_e_table_item_init ();
}
diff --git a/src/e-util/e-table-item.h b/src/e-util/e-table-item.h
index c0cac9e..4bd788f 100644
--- a/src/e-util/e-table-item.h
+++ b/src/e-util/e-table-item.h
@@ -207,6 +207,10 @@ struct _ETableItemClass {
void (*selection_model_added)
(ETableItem *eti,
ESelectionModel *selection);
+ void (*get_bg_color) (ETableItem *eti,
+ gint row,
+ gint col,
+ GdkRGBA *inout_background);
};
GType e_table_item_get_type (void) G_GNUC_CONST;
diff --git a/src/mail/message-list.c b/src/mail/message-list.c
index 070f295..99e412c 100644
--- a/src/mail/message-list.c
+++ b/src/mail/message-list.c
@@ -126,6 +126,8 @@ struct _MessageListPrivate {
gchar **re_prefixes;
gchar **re_separators;
GMutex re_prefixes_lock;
+
+ GdkRGBA *new_mail_bg_color;
};
/* XXX Plain GNode suffers from O(N) tail insertions, and that won't
@@ -2761,6 +2763,49 @@ ml_tree_sorting_changed (ETreeTableAdapter *adapter,
}
static void
+ml_get_bg_color_cb (ETableItem *item,
+ gint row,
+ gint col,
+ GdkRGBA *inout_background,
+ MessageList *message_list)
+{
+ CamelMessageInfo *msg_info;
+ ETreePath path;
+
+ g_return_if_fail (IS_MESSAGE_LIST (message_list));
+ g_return_if_fail (inout_background != NULL);
+
+ if (!message_list->priv->new_mail_bg_color || row < 0)
+ return;
+
+ path = e_tree_table_adapter_node_at_row (e_tree_get_table_adapter (E_TREE (message_list)), row);
+ if (!path || G_NODE_IS_ROOT ((GNode *) path))
+ return;
+
+ /* retrieve the message information array */
+ msg_info = ((GNode *) path)->data;
+ g_return_if_fail (msg_info != NULL);
+
+ if (!(camel_message_info_get_flags (msg_info) & CAMEL_MESSAGE_SEEN))
+ *inout_background = *(message_list->priv->new_mail_bg_color);
+}
+
+static void
+ml_style_updated_cb (MessageList *message_list)
+{
+ g_return_if_fail (IS_MESSAGE_LIST (message_list));
+
+ if (message_list->priv->new_mail_bg_color) {
+ gdk_rgba_free (message_list->priv->new_mail_bg_color);
+ message_list->priv->new_mail_bg_color = NULL;
+ }
+
+ gtk_widget_style_get (GTK_WIDGET (message_list),
+ "new-mail-bg-color", &message_list->priv->new_mail_bg_color,
+ NULL);
+}
+
+static void
message_list_set_session (MessageList *message_list,
EMailSession *session)
{
@@ -2982,6 +3027,11 @@ message_list_finalize (GObject *object)
if (message_list->priv->tree_model_root != NULL)
extended_g_node_destroy (message_list->priv->tree_model_root);
+ if (message_list->priv->new_mail_bg_color) {
+ gdk_rgba_free (message_list->priv->new_mail_bg_color);
+ message_list->priv->new_mail_bg_color = NULL;
+ }
+
/* Chain up to parent's finalize() method. */
G_OBJECT_CLASS (message_list_parent_class)->finalize (object);
}
@@ -3565,6 +3615,15 @@ message_list_class_init (MessageListClass *class)
G_PARAM_CONSTRUCT |
G_PARAM_STATIC_STRINGS));
+ gtk_widget_class_install_style_property (
+ GTK_WIDGET_CLASS (class),
+ g_param_spec_boxed (
+ "new-mail-bg-color",
+ "New Mail Background Color",
+ "Background color to use for new mails",
+ GDK_TYPE_RGBA,
+ G_PARAM_READABLE));
+
signals[MESSAGE_SELECTED] = g_signal_new (
"message_selected",
MESSAGE_LIST_TYPE,
@@ -3675,6 +3734,7 @@ message_list_init (MessageList *message_list)
message_list->priv->re_prefixes = NULL;
message_list->priv->re_separators = NULL;
message_list->priv->group_by_threads = TRUE;
+ message_list->priv->new_mail_bg_color = NULL;
}
static void
@@ -3682,6 +3742,7 @@ message_list_construct (MessageList *message_list)
{
ETreeTableAdapter *adapter;
ETableSpecification *specification;
+ ETableItem *item;
AtkObject *a11y;
gboolean constructed;
gchar *etspecfile;
@@ -3764,6 +3825,16 @@ message_list_construct (MessageList *message_list)
g_signal_connect (
adapter, "sorting_changed",
G_CALLBACK (ml_tree_sorting_changed), message_list);
+
+ item = e_tree_get_item (E_TREE (message_list));
+ g_signal_connect (item, "get-bg-color",
+ G_CALLBACK (ml_get_bg_color_cb), message_list);
+
+ g_signal_connect (message_list, "realize",
+ G_CALLBACK (ml_style_updated_cb), NULL);
+
+ g_signal_connect (message_list, "style-updated",
+ G_CALLBACK (ml_style_updated_cb), NULL);
}
/**
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]