add new ctree sorting code
[claws.git] / src / foldersel.c
index 0af020f736facc0a7186a92df281544660c6bf4d..c9d197f95f6d51d1bc2500dde670eff14c2637b6 100644 (file)
@@ -86,6 +86,10 @@ static void key_pressed              (GtkWidget      *widget,
                                 GdkEventKey    *event,
                                 gpointer        data);
 
+static gint foldersel_clist_compare    (GtkCList       *clist,
+                                        gconstpointer   ptr1,
+                                        gconstpointer   ptr2);
+
 FolderItem *foldersel_folder_sel(Folder *cur_folder,
                                 FolderSelectionType type,
                                 const gchar *default_folder)
@@ -170,6 +174,7 @@ static void foldersel_create(void)
        gtk_ctree_set_expander_style(GTK_CTREE(ctree),
                                     GTK_CTREE_EXPANDER_SQUARE);
        gtk_ctree_set_indent(GTK_CTREE(ctree), CTREE_INDENT);
+       gtk_clist_set_compare_func(GTK_CLIST(ctree), foldersel_clist_compare);
        GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(ctree)->column[0].button,
                               GTK_CAN_FOCUS);
        /* gtk_signal_connect(GTK_OBJECT(ctree), "tree_select_row",
@@ -314,7 +319,7 @@ static void foldersel_set_tree(Folder *cur_folder, FolderSelectionType type)
                                              folder->node,
                                              foldersel_gnode_func,
                                              NULL);
-               gtk_ctree_sort_recursive(GTK_CTREE(ctree), node);
+               gtk_sctree_sort_recursive(GTK_CTREE(ctree), node);
                SET_SPECIAL_FOLDER(folder->inbox);
                SET_SPECIAL_FOLDER(folder->outbox);
                SET_SPECIAL_FOLDER(folder->draft);
@@ -376,3 +381,17 @@ static void key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data)
        if (event && event->keyval == GDK_Escape)
                foldersel_cancel(NULL, NULL);
 }
+
+static gint foldersel_clist_compare(GtkCList *clist,
+                                   gconstpointer ptr1, gconstpointer ptr2)
+{
+       FolderItem *item1 = ((GtkCListRow *)ptr1)->data;
+       FolderItem *item2 = ((GtkCListRow *)ptr2)->data;
+
+       if (!item1->name)
+               return (item2->name != NULL);
+       if (!item2->name)
+               return -1;
+
+       return g_strcasecmp(item1->name, item2->name);
+}