From 434d0476d22cca10d080097e5c181d33eaeb1b7a Mon Sep 17 00:00:00 2001 From: Jose Dapena Paz Date: Fri, 6 Feb 2009 14:04:16 +0000 Subject: [PATCH] Change header view style on style change pmo-trunk-r7409 --- src/widgets/modest-header-view-render.c | 38 ++++++------------ src/widgets/modest-header-view.c | 64 +++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+), 27 deletions(-) diff --git a/src/widgets/modest-header-view-render.c b/src/widgets/modest-header-view-render.c index fcbe01b..825ada5 100644 --- a/src/widgets/modest-header-view-render.c +++ b/src/widgets/modest-header-view-render.c @@ -41,11 +41,6 @@ #include #include -typedef enum { - RENDER_CELL_STYLE_DEFAULT=0, - RENDER_CELL_STYLE_GREY -} RenderCellStyle; - static const gchar * get_status_string (ModestTnySendQueueStatus status) { @@ -127,8 +122,7 @@ set_common_flags (GtkCellRenderer *renderer, TnyHeaderFlags flags) static void set_cell_text (GtkCellRenderer *renderer, const gchar *text, - TnyHeaderFlags flags, - RenderCellStyle style) + TnyHeaderFlags flags) { PangoWeight weight; gboolean strikethrough; @@ -141,16 +135,6 @@ set_cell_text (GtkCellRenderer *renderer, "weight", (flags & TNY_HEADER_FLAG_SEEN) ? PANGO_WEIGHT_NORMAL : PANGO_WEIGHT_ULTRABOLD, "strikethrough", (flags &TNY_HEADER_FLAG_DELETED) ? TRUE : FALSE, NULL); - switch (style) { - case RENDER_CELL_STYLE_GREY: - g_object_set (G_OBJECT (renderer), - "foreground", "#666666", - "scale", PANGO_SCALE_SMALL, - NULL); - break; - case RENDER_CELL_STYLE_DEFAULT: - break; - } g_object_thaw_notify (G_OBJECT (renderer)); } @@ -205,10 +189,10 @@ _modest_header_view_date_cell_data (GtkTreeViewColumn *column, GtkCellRenderer header_view = MODEST_HEADER_VIEW (gtk_tree_view_column_get_tree_view (column)); set_cell_text (renderer, _modest_header_view_get_display_date (header_view, date), - flags, RENDER_CELL_STYLE_DEFAULT); + flags); #else set_cell_text (renderer, modest_text_utils_get_display_date (date), - flags, RENDER_CELL_STYLE_DEFAULT); + flags); #endif } @@ -236,7 +220,7 @@ _modest_header_view_sender_receiver_cell_data (GtkTreeViewColumn *column, modest_text_utils_get_display_address (address); /* string is changed in-place */ set_cell_text (renderer, (address && address[0] != '\0')?address:_("mail_va_no_to"), - flags, RENDER_CELL_STYLE_DEFAULT); + flags); g_free (address); } /* @@ -326,13 +310,13 @@ _modest_header_view_compact_header_cell_data (GtkTreeViewColumn *column, GtkCe NULL); set_cell_text (subject_cell, (subject && subject[0] != 0)?subject:_("mail_va_no_subject"), - flags, RENDER_CELL_STYLE_DEFAULT); + flags); g_free (subject); /* FIXME: we hardcode the color to #666666; instead we should use SecondaryTextColour from the * theme (gtkrc file) */ modest_text_utils_get_display_address (address); /* changed in-place */ - set_cell_text (recipient_cell, (address && address[0] != '\0')?address:_("mail_va_no_to"), flags, RENDER_CELL_STYLE_GREY); + set_cell_text (recipient_cell, (address && address[0] != '\0')?address:_("mail_va_no_to"), flags); g_free (address); if (header_mode == MODEST_HEADER_VIEW_COMPACT_HEADER_MODE_OUTBOX) { @@ -346,18 +330,18 @@ _modest_header_view_compact_header_cell_data (GtkTreeViewColumn *column, GtkCe } status_str = get_status_string (status); - set_cell_text (date_or_status_cell, status_str, flags, RENDER_CELL_STYLE_GREY); + set_cell_text (date_or_status_cell, status_str, flags); } else { #if GTK_CHECK_VERSION (2, 12, 0) ModestHeaderView *header_view; header_view = MODEST_HEADER_VIEW (gtk_tree_view_column_get_tree_view (column)); set_cell_text (date_or_status_cell, date ? _modest_header_view_get_display_date (header_view, date) : "", - flags, RENDER_CELL_STYLE_GREY); + flags); #else set_cell_text (date_or_status_cell, date ? modest_text_utils_get_display_date (date) : "", - flags, RENDER_CELL_STYLE_GREY); + flags); #endif } if (msg_header != NULL) @@ -381,7 +365,7 @@ _modest_header_view_size_cell_data (GtkTreeViewColumn *column, GtkCellRenderer size_str = modest_text_utils_get_display_size (size); - set_cell_text (renderer, size_str, flags, RENDER_CELL_STYLE_DEFAULT); + set_cell_text (renderer, size_str, flags); g_free (size_str); } @@ -404,7 +388,7 @@ _modest_header_view_status_cell_data (GtkTreeViewColumn *column, GtkCellRender else status_str = g_strdup(_("mcen_li_outbox_waiting")); - set_cell_text (renderer, status_str, flags, RENDER_CELL_STYLE_DEFAULT); + set_cell_text (renderer, status_str, flags); g_free (status_str); } diff --git a/src/widgets/modest-header-view.c b/src/widgets/modest-header-view.c index 5b4aedd..9ec52e4 100644 --- a/src/widgets/modest-header-view.c +++ b/src/widgets/modest-header-view.c @@ -121,6 +121,9 @@ static gboolean modest_header_view_on_expose_event (GtkTreeView *header_vie GdkEventExpose *event, gpointer user_data); +static void on_notify_style (GObject *obj, GParamSpec *spec, gpointer userdata); +static void update_style (ModestHeaderView *self); + typedef enum { HEADER_VIEW_NON_EMPTY, HEADER_VIEW_EMPTY, @@ -162,6 +165,9 @@ struct _ModestHeaderViewPrivate { gboolean notify_status; /* whether or not the filter_row should notify about changes in the filtering */ ModestDatetimeFormatter *datetime_formatter; + + GtkCellRenderer *renderer_address; + GtkCellRenderer *renderer_date_status; }; typedef struct _HeadersCountChangedHelper HeadersCountChangedHelper; @@ -374,8 +380,10 @@ modest_header_view_set_columns (ModestHeaderView *self, const GList *columns, Tn renderer_recpt_box = modest_hbox_cell_renderer_new (); renderer_subject_box = modest_hbox_cell_renderer_new (); renderer_recpt = gtk_cell_renderer_text_new (); + priv->renderer_address = renderer_recpt; renderer_subject = gtk_cell_renderer_text_new (); renderer_compact_date_or_status = gtk_cell_renderer_text_new (); + priv->renderer_date_status = renderer_compact_date_or_status; modest_vbox_cell_renderer_append (MODEST_VBOX_CELL_RENDERER (renderer_compact_header), renderer_subject_box, FALSE); g_object_set_data (G_OBJECT (renderer_compact_header), "subject-box-renderer", renderer_subject_box); @@ -558,6 +566,9 @@ modest_header_view_set_columns (ModestHeaderView *self, const GList *columns, Tn compact_column, NULL); } + update_style (self); + g_signal_connect (G_OBJECT (self), "notify::style", G_CALLBACK (on_notify_style), (gpointer) self); + return TRUE; } @@ -2321,3 +2332,56 @@ modest_header_view_unset_filter (ModestHeaderView *self, gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (filter_model)); } } + +static void +on_notify_style (GObject *obj, GParamSpec *spec, gpointer userdata) +{ + if (strcmp ("style", spec->name) == 0) { + update_style (MODEST_HEADER_VIEW (obj)); + gtk_widget_queue_draw (GTK_WIDGET (obj)); + } +} + +static void +update_style (ModestHeaderView *self) +{ + ModestHeaderViewPrivate *priv; + GdkColor style_color; + PangoAttrList *attr_list; + GtkStyle *style; + PangoAttribute *attr; + + g_return_if_fail (MODEST_IS_HEADER_VIEW (self)); + priv = MODEST_HEADER_VIEW_GET_PRIVATE (self); + + /* Set color */ + + attr_list = pango_attr_list_new (); + if (!gtk_style_lookup_color (GTK_WIDGET (self)->style, "SecondaryTextColor", &style_color)) { + gdk_color_parse ("grey", &style_color); + } + attr = pango_attr_foreground_new (style_color.red, style_color.green, style_color.blue); + pango_attr_list_insert (attr_list, attr); + + /* set font */ + style = gtk_rc_get_style_by_paths (gtk_widget_get_settings + (GTK_WIDGET(self)), + "SmallSystemFont", NULL, + G_TYPE_NONE); + attr = pango_attr_font_desc_new (pango_font_description_copy + (style->font_desc)); + pango_attr_list_insert (attr_list, attr); + + g_object_set (G_OBJECT (priv->renderer_address), + "foreground-gdk", &style_color, + "foreground-set", TRUE, + "attributes", attr_list, + NULL); + g_object_set (G_OBJECT (priv->renderer_date_status), + "foreground-gdk", &style_color, + "foreground-set", TRUE, + "attributes", attr_list, + NULL); + pango_attr_list_unref (attr_list); +} + -- 1.7.9.5