diff options
-rw-r--r-- | mail/ChangeLog | 6 | ||||
-rw-r--r-- | mail/em-folder-tree-model.c | 36 | ||||
-rw-r--r-- | mail/mail-vfolder.c | 2 |
3 files changed, 39 insertions, 5 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog index ab34b9dbb6..3d21154d1b 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,5 +1,11 @@ 2004-01-15 Jeffrey Stedfast <fejj@ximian.com> + * mail-vfolder.c: Make vfolder_store 'global'. + + * em-folder-tree-model.c (sort_cb): Fix bug #12600 by not sorting + VFolders (ie. show them in the same order they appear in the + editor). + Fixes bug #52888 * em-folder-tree-model.c (sort_cb): New sort function for the diff --git a/mail/em-folder-tree-model.c b/mail/em-folder-tree-model.c index 45ae925398..6f409cfb05 100644 --- a/mail/em-folder-tree-model.c +++ b/mail/em-folder-tree-model.c @@ -182,13 +182,17 @@ em_folder_tree_model_class_init (EMFolderTreeModelClass *klass) static int sort_cb (GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer user_data) { - gboolean astore, bstore; + extern CamelStore *vfolder_store; char *aname, *bname; + CamelStore *store; + gboolean is_store; - gtk_tree_model_get (model, a, COL_BOOL_IS_STORE, &astore, COL_STRING_DISPLAY_NAME, &aname, -1); - gtk_tree_model_get (model, b, COL_BOOL_IS_STORE, &bstore, COL_STRING_DISPLAY_NAME, &bname, -1); + gtk_tree_model_get (model, a, COL_BOOL_IS_STORE, &is_store, + COL_POINTER_CAMEL_STORE, &store, + COL_STRING_DISPLAY_NAME, &aname, -1); + gtk_tree_model_get (model, b, COL_STRING_DISPLAY_NAME, &bname, -1); - if (astore && bstore) { + if (is_store) { /* On This Computer is always first and VFolders is always last */ if (!strcmp (aname, _("On this Computer"))) return -1; @@ -198,6 +202,30 @@ sort_cb (GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer user_data return 1; if (!strcmp (bname, _("VFolders"))) return -1; + } else if (store == vfolder_store) { + /* perform no sorting, we want to display in the same + * order as they appear in the VFolder editor - UNMATCHED is always last */ + GtkTreePath *path; + int ret; + + if (aname && !strcmp (aname, _("UNMATCHED"))) + return 1; + if (bname && !strcmp (bname, _("UNMATCHED"))) + return -1; + + path = gtk_tree_model_get_path (model, a); + aname = gtk_tree_path_to_string (path); + gtk_tree_path_free (path); + + path = gtk_tree_model_get_path (model, b); + bname = gtk_tree_path_to_string (path); + gtk_tree_path_free (path); + + ret = strcmp (aname, bname); + g_free (aname); + g_free (bname); + + return ret; } else { /* Inbox is always first */ if (aname && (!strcmp (aname, "INBOX") || !strcmp (aname, _("Inbox")))) diff --git a/mail/mail-vfolder.c b/mail/mail-vfolder.c index 21a920b7c2..f014e42d08 100644 --- a/mail/mail-vfolder.c +++ b/mail/mail-vfolder.c @@ -51,7 +51,7 @@ #define d(x) /*(printf("%s(%d):%s: ", __FILE__, __LINE__, __PRETTY_FUNCTION__), (x))*/ static VfolderContext *context; /* context remains open all time */ -static CamelStore *vfolder_store; /* the 1 static vfolder store */ +CamelStore *vfolder_store; /* the 1 static vfolder store */ /* lock for accessing shared resources (below) */ static pthread_mutex_t vfolder_lock = PTHREAD_MUTEX_INITIALIZER; |