* src/modest-text-utils.[ch]:
authorJose Dapena Paz <jdapena@igalia.com>
Fri, 15 Jun 2007 10:23:28 +0000 (10:23 +0000)
committerJose Dapena Paz <jdapena@igalia.com>
Fri, 15 Jun 2007 10:23:28 +0000 (10:23 +0000)
        * (modest_text_utils_get_subject_prefix_len): added some strings
          to the subject filter.
* src/widgets/modest-header-view.c:
        * Added (cmp_subject_rows), that compares the subjects filtering
          the Re:, Fwd:, etc.
        * Now it uses the new cmp_subject_rows function to sort the
          headers with subject field.

pmo-trunk-r2252

src/modest-text-utils.c
src/widgets/modest-header-view.c

index f35a127..df9b846 100644 (file)
@@ -957,10 +957,11 @@ modest_text_utils_get_subject_prefix_len (const gchar *sub)
 {
        gint i;
        static const gchar* prefix[] = {
-               "Re:", "RE:", "Fwd:", "FWD:", "FW:", NULL
+               "Re:", "RE:", "RV:", "re:"
+               "Fwd:", "FWD:", "FW:", "fwd:", "Fw:", "fw:", NULL
        };
                
-       if (!sub || (sub[0] != 'R' && sub[0] != 'F')) /* optimization */
+       if (!sub || (sub[0] != 'R' && sub[0] != 'F' && sub[0] != 'r' && sub[0] != 'f')) /* optimization */
                return 0;
 
        i = 0;
index decad30..62e604d 100644 (file)
@@ -60,6 +60,11 @@ static gint          cmp_rows               (GtkTreeModel *tree_model,
                                             GtkTreeIter *iter2,
                                             gpointer user_data);
 
+static gint          cmp_subject_rows       (GtkTreeModel *tree_model,
+                                            GtkTreeIter *iter1,
+                                            GtkTreeIter *iter2,
+                                            gpointer user_data);
+
 static void          on_selection_changed   (GtkTreeSelection *sel, 
                                             gpointer user_data);
 
@@ -445,6 +450,10 @@ modest_header_view_set_columns (ModestHeaderView *self, const GList *columns, Tn
                                                 TNY_GTK_HEADER_LIST_MODEL_FLAGS_COLUMN,
                                                 (GtkTreeIterCompareFunc) cmp_rows,
                                                 compact_column, NULL);
+               gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (sortable),
+                                                TNY_GTK_HEADER_LIST_MODEL_SUBJECT_COLUMN,
+                                                (GtkTreeIterCompareFunc) cmp_subject_rows,
+                                                compact_column, NULL);
        }
 
 
@@ -813,6 +822,10 @@ modest_header_view_set_folder_intern (ModestHeaderView *self, TnyFolder *folder)
                                                 TNY_GTK_HEADER_LIST_MODEL_FLAGS_COLUMN,
                                                 (GtkTreeIterCompareFunc) cmp_rows,
                                                 cols->data, NULL);
+               gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE(sortable),
+                                                TNY_GTK_HEADER_LIST_MODEL_SUBJECT_COLUMN,
+                                                (GtkTreeIterCompareFunc) cmp_subject_rows,
+                                                cols->data, NULL);
        }
 
        /* Set new model */
@@ -1093,6 +1106,30 @@ cmp_rows (GtkTreeModel *tree_model, GtkTreeIter *iter1, GtkTreeIter *iter2,
        }
 }
 
+static gint
+cmp_subject_rows (GtkTreeModel *tree_model, GtkTreeIter *iter1, GtkTreeIter *iter2,
+                 gpointer user_data)
+{
+       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, iter1, TNY_GTK_HEADER_LIST_MODEL_SUBJECT_COLUMN, &val1,
+                           TNY_GTK_HEADER_LIST_MODEL_DATE_SENT_TIME_T_COLUMN, &t1, -1);
+       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),
+                                            TRUE);
+       g_free (val1);
+       g_free (val2);
+       return cmp;
+}
+
 /* Drag and drop stuff */
 static void
 drag_data_get_cb (GtkWidget *widget, GdkDragContext *context,