changeset 8928:755d7f8907c6

[gaim-migrate @ 9698] " This patch creates a custom sort function that will sort the "none" theme, if found, at the top of the Smiley Themes list. Luke and I thought it was good idea to do so. I also had to add just the theme name to the tree list since the other field had the name, author, and description all marked up, which would be stupid to try and sort. This way I can just look for "none"" --Don Seiler committer: Tailor Script <tailor@pidgin.im>
author Luke Schierer <lschiere@pidgin.im>
date Fri, 14 May 2004 05:04:28 +0000
parents 5dd21fa59de3
children 54eba3833e34
files src/gtkprefs.c
diffstat 1 files changed, 39 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/gtkprefs.c	Fri May 14 02:06:28 2004 +0000
+++ b/src/gtkprefs.c	Fri May 14 05:04:28 2004 +0000
@@ -462,6 +462,7 @@
 				   0, pixbuf,
 				   1, description,
 				   2, theme->path,
+				   3, theme->name,
 				   -1);
 
 		if (pixbuf != NULL)
@@ -586,6 +587,37 @@
 	gtk_drag_finish(dc, FALSE, FALSE, t);
 }
 
+/* Does same as normal sort, except "none" is sorted first */
+gint gaim_sort_smileys (GtkTreeModel	*model,
+						GtkTreeIter		*a,
+						GtkTreeIter		*b,
+						gpointer		userdata)
+{
+	gaim_debug_info("gaim_sort_smileys","entered\n");
+	gint ret = 0;
+	gchar *name1, *name2;
+
+	gtk_tree_model_get(model, a, 3, &name1, -1);
+	gtk_tree_model_get(model, b, 3, &name2, -1);
+
+	if (name1 == NULL || name2 == NULL) {
+		if (!(name1 == NULL && name2 == NULL))
+			ret = (name1 == NULL) ? -1: 1;
+	} else if (!g_ascii_strcasecmp(name1, "none")) {
+		/* Sort name1 first */
+		ret = -1;
+	} else if (!g_ascii_strcasecmp(name2, "none")) {
+		/* Sort name2 first */
+		ret = 1;
+	} else {
+		/* Neither string is "none", default to normal sort */
+		ret = g_utf8_collate(name1,name2);
+	}
+
+	gaim_debug_info("gaim_sort_smileys","leaving\n");
+	return ret;
+}
+
 GtkWidget *theme_page() {
 	GtkWidget *ret;
 	GtkWidget *sw;
@@ -614,7 +646,7 @@
 	gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_IN);
 
 	gtk_box_pack_start(GTK_BOX(ret), sw, TRUE, TRUE, 0);
-	smiley_theme_store = gtk_list_store_new (3, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING);
+	smiley_theme_store = gtk_list_store_new (4, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
 
 	path = theme_refresh_theme_list();
 
@@ -632,8 +664,13 @@
 		gtk_tree_selection_select_path(sel, path);
 		gtk_tree_path_free(path);
 	}
+
+	/* Custom sort so "none" theme is at top of list */
+	gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(smiley_theme_store),
+									3, gaim_sort_smileys, NULL, NULL);
+
 	gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(smiley_theme_store),
-										 1, GTK_SORT_ASCENDING);
+										 3, GTK_SORT_ASCENDING);
 
 	col = gtk_tree_view_column_new_with_attributes (_("Icon"),
 							rend,