aboutsummaryrefslogtreecommitdiffstats
path: root/mail/em-folder-tree-model.c
diff options
context:
space:
mode:
authorJeffrey Stedfast <fejj@ximian.com>2004-01-16 05:05:36 +0800
committerJeffrey Stedfast <fejj@src.gnome.org>2004-01-16 05:05:36 +0800
commita9b50aee47517fdcfedfc773b01d38d62f4147ac (patch)
treef724a328c148985d94b4a1596296398ac53e2c06 /mail/em-folder-tree-model.c
parentcd15b7e2dae9f3f2d74e3ec3de7f1d460545ff0d (diff)
downloadgsoc2013-evolution-a9b50aee47517fdcfedfc773b01d38d62f4147ac.tar.gz
gsoc2013-evolution-a9b50aee47517fdcfedfc773b01d38d62f4147ac.tar.zst
gsoc2013-evolution-a9b50aee47517fdcfedfc773b01d38d62f4147ac.zip
Fixes bug #52888
2004-01-15 Jeffrey Stedfast <fejj@ximian.com> Fixes bug #52888 * em-folder-tree-model.c (sort_cb): New sort function for the folder-tree. (em_folder_tree_model_init): Set the default sort func. (em_folder_tree_model_new): Set the default sort column. svn path=/trunk/; revision=24255
Diffstat (limited to 'mail/em-folder-tree-model.c')
-rw-r--r--mail/em-folder-tree-model.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/mail/em-folder-tree-model.c b/mail/em-folder-tree-model.c
index 68375023da..45ae925398 100644
--- a/mail/em-folder-tree-model.c
+++ b/mail/em-folder-tree-model.c
@@ -67,6 +67,7 @@ static void em_folder_tree_model_finalize (GObject *obj);
/* interface init methods */
static void tree_model_iface_init (GtkTreeModelIface *iface);
+static void tree_sortable_iface_init (GtkTreeSortableIface *iface);
static void tree_drag_dest_iface_init (GtkTreeDragDestIface *iface);
static void tree_drag_source_iface_init (GtkTreeDragSourceIface *iface);
@@ -124,6 +125,11 @@ em_folder_tree_model_get_type (void)
NULL,
NULL
};
+ static const GInterfaceInfo sortable_info = {
+ (GInterfaceInitFunc) tree_sortable_iface_init,
+ NULL,
+ NULL
+ };
static const GInterfaceInfo drag_dest_info = {
(GInterfaceInitFunc) tree_drag_dest_iface_init,
NULL,
@@ -139,6 +145,8 @@ em_folder_tree_model_get_type (void)
g_type_add_interface_static (type, GTK_TYPE_TREE_MODEL,
&tree_model_info);
+ g_type_add_interface_static (type, GTK_TYPE_TREE_SORTABLE,
+ &sortable_info);
g_type_add_interface_static (type, GTK_TYPE_TREE_DRAG_DEST,
&drag_dest_info);
g_type_add_interface_static (type, GTK_TYPE_TREE_DRAG_SOURCE,
@@ -171,12 +179,50 @@ em_folder_tree_model_class_init (EMFolderTreeModelClass *klass)
G_TYPE_POINTER);
}
+static int
+sort_cb (GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer user_data)
+{
+ gboolean astore, bstore;
+ char *aname, *bname;
+
+ 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);
+
+ if (astore && bstore) {
+ /* On This Computer is always first and VFolders is always last */
+ if (!strcmp (aname, _("On this Computer")))
+ return -1;
+ if (!strcmp (bname, _("On this Computer")))
+ return 1;
+ if (!strcmp (aname, _("VFolders")))
+ return 1;
+ if (!strcmp (bname, _("VFolders")))
+ return -1;
+ } else {
+ /* Inbox is always first */
+ if (aname && (!strcmp (aname, "INBOX") || !strcmp (aname, _("Inbox"))))
+ return -1;
+ if (bname && (!strcmp (bname, "INBOX") || !strcmp (bname, _("Inbox"))))
+ return 1;
+ }
+
+ if (aname == NULL) {
+ if (bname == NULL)
+ return 0;
+ } else if (bname == NULL)
+ return 1;
+
+ return g_utf8_collate (aname, bname);
+}
+
static void
em_folder_tree_model_init (EMFolderTreeModel *model)
{
model->store_hash = g_hash_table_new (g_direct_hash, g_direct_equal);
model->uri_hash = g_hash_table_new (g_str_hash, g_str_equal);
model->expanded = g_hash_table_new (g_str_hash, g_str_equal);
+
+ gtk_tree_sortable_set_default_sort_func ((GtkTreeSortable *) model, sort_cb, NULL, NULL);
}
static void