From 6100a6c465247db5ca98b80efc86f652c40399ec Mon Sep 17 00:00:00 2001
From: Olivier Fourdan <fourdan.olivier@wanadoo.fr>
Date: Sun, 14 Sep 2008 14:53:35 +0000
Subject: [PATCH] Sort theme alphabetically (Fix bug #4318)

(Old svn revision: 27864)
---
 settings-dialogs/xfwm4-settings.c | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/settings-dialogs/xfwm4-settings.c b/settings-dialogs/xfwm4-settings.c
index d14d78d28..826e3e769 100644
--- a/settings-dialogs/xfwm4-settings.c
+++ b/settings-dialogs/xfwm4-settings.c
@@ -49,6 +49,7 @@
 #include "frap-shortcuts-dialog.h"
 
 
+#define DEFAULT_THEME "Default"
 
 enum
 {
@@ -277,6 +278,28 @@ check_xfwm4_themes (GtkListStore *list_store, GtkTreeView *tree_view, XfconfChan
     }
 }
 
+static gint
+sort_func (GtkTreeModel * model, GtkTreeIter * a, GtkTreeIter * b, gpointer user_data)
+{
+    gchar *a_str = NULL;
+    gchar *b_str = NULL;
+
+    gtk_tree_model_get (model, a, 0, &a_str, -1);
+    gtk_tree_model_get (model, b, 0, &b_str, -1);
+
+    if (a_str == NULL)
+        a_str = g_strdup ("");
+    if (b_str == NULL)
+        b_str = g_strdup ("");
+
+    if (!strcmp (a_str, DEFAULT_THEME))
+        return -1;
+    if (!strcmp (b_str, DEFAULT_THEME))
+        return 1;
+
+    return g_utf8_collate (a_str, b_str);
+}
+
 GtkWidget *
 xfwm4_dialog_new_from_xml (GladeXML *gxml)
 {
@@ -286,6 +309,7 @@ xfwm4_dialog_new_from_xml (GladeXML *gxml)
   GtkListStore *list_store;
   GtkCellRenderer *renderer;
   const MenuTmpl *tmpl_iter;
+  GtkTreeModel *tree_model;
   GtkTreeSelection *theme_selection;
   GtkTreeSelection *shortcuts_selection;
   GtkTargetEntry target_entry[2];
@@ -474,6 +498,10 @@ xfwm4_dialog_new_from_xml (GladeXML *gxml)
   gtk_tree_view_set_model (GTK_TREE_VIEW (theme_name_treeview), GTK_TREE_MODEL (list_store));
   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (theme_name_treeview), 0, _("Theme"), renderer, "text", 0, NULL);
 
+  tree_model = gtk_tree_view_get_model (GTK_TREE_VIEW (theme_name_treeview));
+  gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (tree_model), 0, sort_func, NULL, NULL);
+  gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (tree_model), 0, GTK_SORT_ASCENDING);
+
   theme_selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (theme_name_treeview));
   gtk_tree_selection_set_mode (theme_selection, GTK_SELECTION_SINGLE);
 
-- 
GitLab