X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fwidgets%2Fmodest-header-view.c;h=ca98b35545471a6a8c1ae7f61abba4118c38f3cc;hb=63ff29839d53ebc0d2adb48ef3a562f39e71a801;hp=5a671fbd84642654d48bc32c285e5b2d16b976dc;hpb=8170bb3987b5f26f1e3b268c90bc0ba34460e101;p=modest diff --git a/src/widgets/modest-header-view.c b/src/widgets/modest-header-view.c index 5a671fb..ca98b35 100644 --- a/src/widgets/modest-header-view.c +++ b/src/widgets/modest-header-view.c @@ -33,6 +33,7 @@ #include #include #include +#include #include #include @@ -170,6 +171,9 @@ struct _ModestHeaderViewPrivate { GtkCellRenderer *renderer_subject; GtkCellRenderer *renderer_address; GtkCellRenderer *renderer_date_status; + + GdkColor active_color; + GdkColor secondary_color; }; typedef struct _HeadersCountChangedHelper HeadersCountChangedHelper; @@ -1157,6 +1161,7 @@ modest_header_view_set_folder_intern (ModestHeaderView *self, TnyFolder *folder) /* Create sortable model */ sortable = gtk_tree_model_sort_new_with_model (filter_model); + g_object_unref (filter_model); /* install our special sorting functions */ cursor = cols = gtk_tree_view_get_columns (GTK_TREE_VIEW(self)); @@ -2084,6 +2089,13 @@ notify_filter_change_destroy (gpointer data) } static gboolean +current_folder_needs_filtering (ModestHeaderViewPrivate *priv) +{ + /* For the moment we only need to filter outbox */ + return priv->is_outbox; +} + +static gboolean filter_row (GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data) @@ -2123,7 +2135,7 @@ filter_row (GtkTreeModel *model, } if (visible && (priv->filter & MODEST_HEADER_VIEW_FILTER_DELETABLE)) { - if (priv->is_outbox && + if (current_folder_needs_filtering (priv) && modest_tny_all_send_queues_get_msg_status (header) == MODEST_TNY_SEND_QUEUE_SENDING) { visible = FALSE; goto frees; @@ -2131,7 +2143,7 @@ filter_row (GtkTreeModel *model, } if (visible && (priv->filter & MODEST_HEADER_VIEW_FILTER_MOVEABLE)) { - if (priv->is_outbox && + if (current_folder_needs_filtering (priv) && modest_tny_all_send_queues_get_msg_status (header) == MODEST_TNY_SEND_QUEUE_SENDING) { visible = FALSE; goto frees; @@ -2198,17 +2210,20 @@ _clear_hidding_filter (ModestHeaderView *header_view) void modest_header_view_refilter (ModestHeaderView *header_view) { - GtkTreeModel *model = NULL; + GtkTreeModel *model, *sortable = NULL; ModestHeaderViewPrivate *priv = NULL; g_return_if_fail (header_view && MODEST_IS_HEADER_VIEW (header_view)); priv = MODEST_HEADER_VIEW_GET_PRIVATE(header_view); /* Hide cut headers */ - model = gtk_tree_view_get_model (GTK_TREE_VIEW (header_view)); - if (GTK_IS_TREE_MODEL_FILTER (model)) { - priv->status = HEADER_VIEW_INIT; - gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (model)); + sortable = gtk_tree_view_get_model (GTK_TREE_VIEW (header_view)); + if (GTK_IS_TREE_MODEL_SORT (sortable)) { + model = gtk_tree_model_sort_get_model (GTK_TREE_MODEL_SORT (sortable)); + if (GTK_IS_TREE_MODEL_FILTER (model)) { + priv->status = HEADER_VIEW_INIT; + gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (model)); + } } } @@ -2232,10 +2247,19 @@ on_account_removed (TnyAccountStore *self, if (priv->folder) { TnyAccount *my_account; - my_account = tny_folder_get_account (priv->folder); - if (my_account == account) - modest_header_view_clear (MODEST_HEADER_VIEW (user_data)); - g_object_unref (my_account); + if (TNY_IS_MERGE_FOLDER (priv->folder) && + tny_folder_get_folder_type (priv->folder) == TNY_FOLDER_TYPE_OUTBOX) { + ModestTnyAccountStore *acc_store = modest_runtime_get_account_store (); + my_account = modest_tny_account_store_get_local_folders_account (acc_store); + } else { + my_account = tny_folder_get_account (priv->folder); + } + + if (my_account) { + if (my_account == account) + modest_header_view_clear (MODEST_HEADER_VIEW (user_data)); + g_object_unref (my_account); + } } } @@ -2310,17 +2334,14 @@ modest_header_view_set_filter (ModestHeaderView *self, ModestHeaderViewFilter filter) { ModestHeaderViewPrivate *priv; - GtkTreeModel *filter_model; g_return_if_fail (MODEST_IS_HEADER_VIEW (self)); priv = MODEST_HEADER_VIEW_GET_PRIVATE (self); priv->filter |= filter; - filter_model = gtk_tree_view_get_model (GTK_TREE_VIEW (self)); - if (GTK_IS_TREE_MODEL_FILTER(filter_model)) { - gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (filter_model)); - } + if (current_folder_needs_filtering (priv)) + modest_header_view_refilter (self); } void @@ -2328,17 +2349,14 @@ modest_header_view_unset_filter (ModestHeaderView *self, ModestHeaderViewFilter filter) { ModestHeaderViewPrivate *priv; - GtkTreeModel *filter_model; g_return_if_fail (MODEST_IS_HEADER_VIEW (self)); priv = MODEST_HEADER_VIEW_GET_PRIVATE (self); priv->filter &= ~filter; - filter_model = gtk_tree_view_get_model (GTK_TREE_VIEW (self)); - if (GTK_IS_TREE_MODEL_FILTER(filter_model)) { - gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (filter_model)); - } + if (current_folder_needs_filtering (priv)) + modest_header_view_refilter (self); } static void @@ -2359,7 +2377,6 @@ update_style (ModestHeaderView *self) PangoAttrList *attr_list; GtkStyle *style; PangoAttribute *attr; - GdkColor *new_color; g_return_if_fail (MODEST_IS_HEADER_VIEW (self)); priv = MODEST_HEADER_VIEW_GET_PRIVATE (self); @@ -2370,6 +2387,7 @@ update_style (ModestHeaderView *self) if (!gtk_style_lookup_color (GTK_WIDGET (self)->style, "SecondaryTextColor", &style_color)) { gdk_color_parse ("grey", &style_color); } + priv->secondary_color = style_color; attr = pango_attr_foreground_new (style_color.red, style_color.green, style_color.blue); pango_attr_list_insert (attr_list, attr); @@ -2384,25 +2402,25 @@ update_style (ModestHeaderView *self) pango_attr_list_insert (attr_list, attr); g_object_set (G_OBJECT (priv->renderer_address), - "foreground-gdk", &style_color, + "foreground-gdk", &(priv->secondary_color), "foreground-set", TRUE, "attributes", attr_list, NULL); g_object_set (G_OBJECT (priv->renderer_date_status), - "foreground-gdk", &style_color, + "foreground-gdk", &(priv->secondary_color), "foreground-set", TRUE, "attributes", attr_list, NULL); pango_attr_list_unref (attr_list); } else { g_object_set (G_OBJECT (priv->renderer_address), - "foreground-gdk", &style_color, + "foreground-gdk", &(priv->secondary_color), "foreground-set", TRUE, "scale", PANGO_SCALE_SMALL, "scale-set", TRUE, NULL); g_object_set (G_OBJECT (priv->renderer_date_status), - "foreground-gdk", &style_color, + "foreground-gdk", &(priv->secondary_color), "foreground-set", TRUE, "scale", PANGO_SCALE_SMALL, "scale-set", TRUE, @@ -2410,12 +2428,47 @@ update_style (ModestHeaderView *self) } if (gtk_style_lookup_color (GTK_WIDGET (self)->style, "ActiveTextColor", &style_active_color)) { - new_color = gdk_color_copy (&style_active_color); + priv->active_color = style_active_color; +#ifdef MODEST_TOOLKIT_HILDON2 + g_object_set_data (G_OBJECT (priv->renderer_subject), BOLD_IS_ACTIVE_COLOR, GINT_TO_POINTER (TRUE)); + g_object_set_data (G_OBJECT (priv->renderer_subject), ACTIVE_COLOR, &(priv->active_color)); +#endif } else { - new_color = NULL; - } #ifdef MODEST_TOOLKIT_HILDON2 - g_object_set_data (G_OBJECT (priv->renderer_subject), BOLD_IS_ACTIVE_COLOR, GINT_TO_POINTER (new_color != NULL)); - g_object_set_data_full (G_OBJECT (priv->renderer_subject), ACTIVE_COLOR, new_color, (GDestroyNotify) gdk_color_free); + g_object_set_data (G_OBJECT (priv->renderer_subject), BOLD_IS_ACTIVE_COLOR, GINT_TO_POINTER (FALSE)); #endif + } +} + +TnyHeader * +modest_header_view_get_header_at_pos (ModestHeaderView *header_view, + gint initial_x, + gint initial_y) +{ + GtkTreePath *path; + GtkTreeModel *tree_model; + GtkTreeIter iter; + TnyHeader *header; + + /* Get tree path */ + if (!gtk_tree_view_get_dest_row_at_pos ((GtkTreeView *) header_view, + initial_x, + initial_y, + &path, + NULL)) + return NULL; + + g_debug ("located path: %s", gtk_tree_path_to_string (path)); + + /* Get model */ + tree_model = gtk_tree_view_get_model ((GtkTreeView *) header_view); + if (!gtk_tree_model_get_iter (tree_model, &iter, path)) + return NULL; + + /* Get header */ + gtk_tree_model_get (tree_model, &iter, + TNY_GTK_HEADER_LIST_MODEL_INSTANCE_COLUMN, + &header, -1); + + return header; }