GdkColor active_color;
GdkColor secondary_color;
+
+ gint show_latest;
};
typedef struct _HeadersCountChangedHelper HeadersCountChangedHelper;
priv = MODEST_HEADER_VIEW_GET_PRIVATE(obj);
+ priv->show_latest = 0;
+
priv->folder = NULL;
priv->is_outbox = FALSE;
gtk_tree_path_free (tree_iter_path);
}
} else {
- if (priv->autoselect_reference != NULL) {
+ if (priv->autoselect_reference != NULL && gtk_tree_row_reference_valid (priv->autoselect_reference)) {
gboolean moved_selection = FALSE;
GtkTreePath * last_path;
if (gtk_tree_selection_count_selected_rows (sel) != 1) {
}
static void
-modest_header_view_set_folder_intern (ModestHeaderView *self, TnyFolder *folder)
+modest_header_view_set_folder_intern (ModestHeaderView *self,
+ TnyFolder *folder,
+ gboolean refresh)
{
TnyFolderType type;
TnyList *headers;
priv = MODEST_HEADER_VIEW_GET_PRIVATE(self);
headers = TNY_LIST (tny_gtk_header_list_model_new ());
+ tny_gtk_header_list_model_set_show_latest (TNY_GTK_HEADER_LIST_MODEL (headers), priv->show_latest);
/* Start the monitor in the callback of the
tny_gtk_header_list_model_set_folder call. It's crucial to
be added again by tny_gtk_header_list_model_set_folder, so
we'd end up with duplicate headers. sergio */
tny_gtk_header_list_model_set_folder (TNY_GTK_HEADER_LIST_MODEL(headers),
- folder, FALSE,
+ folder, refresh,
set_folder_intern_get_headers_async_cb,
NULL, self);
ModestMailOperation *mail_op = NULL;
/* Set folder in the model */
- modest_header_view_set_folder_intern (self, folder);
+ modest_header_view_set_folder_intern (self, folder, refresh);
/* Pick my reference. Nothing to do with the mail operation */
priv->folder = g_object_ref (folder);
return header;
}
+
+void
+modest_header_view_set_show_latest (ModestHeaderView *header_view,
+ gint show_latest)
+{
+ ModestHeaderViewPrivate *priv;
+ GtkTreeModel *sortable, *filter, *model;
+
+ priv = MODEST_HEADER_VIEW_GET_PRIVATE (header_view);
+ priv->show_latest = show_latest;
+
+ sortable = gtk_tree_view_get_model (GTK_TREE_VIEW (header_view));
+ if (GTK_IS_TREE_MODEL_SORT (sortable)) {
+ filter = gtk_tree_model_sort_get_model (GTK_TREE_MODEL_SORT (sortable));
+ if (GTK_IS_TREE_MODEL_FILTER (filter)) {
+ model = gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER (filter));
+ if (model) {
+ tny_gtk_header_list_model_set_show_latest (TNY_GTK_HEADER_LIST_MODEL (model), priv->show_latest);
+ }
+ }
+ }
+}
+
+gint
+modest_header_view_get_show_latest (ModestHeaderView *header_view)
+{
+ ModestHeaderViewPrivate *priv;
+ GtkTreeModel *sortable, *filter, *model;
+ gint result;
+
+ priv = MODEST_HEADER_VIEW_GET_PRIVATE (header_view);
+
+ result = priv->show_latest;
+ sortable = gtk_tree_view_get_model (GTK_TREE_VIEW (header_view));
+ if (GTK_IS_TREE_MODEL_SORT (sortable)) {
+ filter = gtk_tree_model_sort_get_model (GTK_TREE_MODEL_SORT (sortable));
+ if (GTK_IS_TREE_MODEL_FILTER (filter)) {
+ model = gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER (filter));
+ if (model) {
+ result = tny_gtk_header_list_model_get_show_latest (TNY_GTK_HEADER_LIST_MODEL (model));
+ }
+ }
+ }
+
+ return result;
+}
+
+gint
+modest_header_view_get_not_latest (ModestHeaderView *header_view)
+{
+ ModestHeaderViewPrivate *priv;
+ gint not_latest = 0;
+ GtkTreeModel *sortable, *filter, *model;
+
+ priv = MODEST_HEADER_VIEW_GET_PRIVATE (header_view);
+
+ if (priv->show_latest == 0)
+ return 0;
+
+ sortable = gtk_tree_view_get_model (GTK_TREE_VIEW (header_view));
+ if (GTK_IS_TREE_MODEL_SORT (sortable)) {
+ filter = gtk_tree_model_sort_get_model (GTK_TREE_MODEL_SORT (sortable));
+ if (GTK_IS_TREE_MODEL_FILTER (filter)) {
+ model = gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER (filter));
+ if (model) {
+ not_latest = MAX (0, tny_list_get_length (TNY_LIST (model)) - priv->show_latest);
+ }
+ }
+ }
+
+ return not_latest;
+}