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);
gint t1, t2;
gchar *val1, *val2;
gint cmp;
-/* static int counter = 0; */
g_return_val_if_fail (GTK_IS_TREE_VIEW_COLUMN(user_data), 0);
gtk_tree_model_get (tree_model, iter2, TNY_GTK_HEADER_LIST_MODEL_SUBJECT_COLUMN, &val2,
TNY_GTK_HEADER_LIST_MODEL_DATE_SENT_TIME_T_COLUMN, &t2, -1);
- cmp = modest_text_utils_utf8_strcmp (val1 + modest_text_utils_get_subject_prefix_len(val1),
- val2 + modest_text_utils_get_subject_prefix_len(val2),
+ /* Do not use the prefixes for sorting. Consume all the blank
+ spaces for sorting */
+ cmp = modest_text_utils_utf8_strcmp (g_strchug (val1 + modest_text_utils_get_subject_prefix_len(val1)),
+ g_strchug (val2 + modest_text_utils_get_subject_prefix_len(val2)),
TRUE);
+
+ /* If they're equal based on subject without prefix then just
+ sort them by length. This will show messages like this.
+ * Fw:
+ * Fw:Fw:
+ * Fw:Fw:
+ * Fw:Fw:Fw:
+ * */
+ if (cmp == 0)
+ cmp = (g_utf8_strlen (val1, -1) >= g_utf8_strlen (val2, -1)) ? 1 : -1;
+
g_free (val1);
g_free (val2);
return cmp;
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;
+}