Change header view style on style change
authorJose Dapena Paz <jdapena@igalia.com>
Fri, 6 Feb 2009 14:04:16 +0000 (14:04 +0000)
committerJose Dapena Paz <jdapena@igalia.com>
Fri, 6 Feb 2009 14:04:16 +0000 (14:04 +0000)
pmo-trunk-r7409

src/widgets/modest-header-view-render.c
src/widgets/modest-header-view.c

index fcbe01b..825ada5 100644 (file)
 #include <modest-platform.h>
 #include <string.h>
 
 #include <modest-platform.h>
 #include <string.h>
 
-typedef enum {
-       RENDER_CELL_STYLE_DEFAULT=0,
-       RENDER_CELL_STYLE_GREY
-} RenderCellStyle;
-
 static const gchar *
 get_status_string (ModestTnySendQueueStatus status)
 {
 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, 
 static void
 set_cell_text (GtkCellRenderer *renderer, 
               const gchar *text, 
-              TnyHeaderFlags flags,
-              RenderCellStyle style)
+              TnyHeaderFlags flags)
 {
        PangoWeight weight;
        gboolean strikethrough;
 {
        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);
                      "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));
 }
 
        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),
        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),
 #else
        set_cell_text (renderer, modest_text_utils_get_display_date (date),
-                      flags, RENDER_CELL_STYLE_DEFAULT);
+                      flags);
 #endif
 }
 
 #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"),
        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);
 }
 /*
        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"), 
                      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 */
        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) {
        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);
                }
                
                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) : "",
        } 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) : "",
 #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)
 #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);
        
        
        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);
  }
 
        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"));
        
        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);
  }
 
        g_free (status_str);
  }
index 5b4aedd..9ec52e4 100644 (file)
@@ -121,6 +121,9 @@ static gboolean      modest_header_view_on_expose_event (GtkTreeView *header_vie
                                                         GdkEventExpose *event,
                                                         gpointer user_data);
 
                                                         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,
 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;
        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;
 };
 
 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 ();
        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 ();
        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);
 
        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);
        }
 
                                                 compact_column, NULL);
        }
 
+       update_style (self);
+       g_signal_connect (G_OBJECT (self), "notify::style", G_CALLBACK (on_notify_style), (gpointer) self);
+
        return TRUE;
 }
 
        return TRUE;
 }
 
@@ -2321,3 +2332,56 @@ modest_header_view_unset_filter (ModestHeaderView *self,
                gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (filter_model));  
        }
 }
                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);
+}
+