diff options
author | Eric Koegel <eric.koegel@gmail.com> | 2013-04-19 11:46:09 +0300 |
---|---|---|
committer | Eric Koegel <eric.koegel@gmail.com> | 2013-04-19 11:47:16 +0300 |
commit | de3e0239693bbde88a32805541d5decdbef4b9b3 (patch) | |
tree | bd92d45ce0ec632e77237f74b9dff743a89fd0cf | |
parent | 066b3f13732fe54d2cf54cc031664a7b023235e0 (diff) | |
download | xfdesktop-de3e0239693bbde88a32805541d5decdbef4b9b3.tar.gz |
Use a collation key when sorting wallpapers
-rw-r--r-- | settings/main.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/settings/main.c b/settings/main.c index 5fdd1840..b321a54e 100644 --- a/settings/main.c +++ b/settings/main.c @@ -141,6 +141,7 @@ enum COL_NAME, COL_FILENAME, COL_THUMBNAIL, + COL_COLLATE_KEY, N_COLS, }; @@ -442,7 +443,7 @@ image_list_compare(GtkTreeModel *model, gchar *key_b = NULL; gint ret; - gtk_tree_model_get(model, b, COL_NAME, &key_b, -1); + gtk_tree_model_get(model, b, COL_COLLATE_KEY, &key_b, -1); ret = g_strcmp0(a, key_b); @@ -460,6 +461,7 @@ xfdesktop_settings_image_iconview_add(GtkTreeModel *model, gboolean added = FALSE, found = FALSE, valid = FALSE; GtkTreeIter iter, search_iter; gchar *name = NULL, *name_utf8 = NULL, *name_markup = NULL, *size_string = NULL; + gchar *collate_key = NULL; gint position = 0; const gchar *content_type = g_file_info_get_content_type(info); goffset file_size = g_file_info_get_size(info); @@ -469,7 +471,8 @@ xfdesktop_settings_image_iconview_add(GtkTreeModel *model, name = g_path_get_basename(path); if(name) { - name_utf8 = g_filename_to_utf8(name, strlen(name), + guint name_length = strlen(name); + name_utf8 = g_filename_to_utf8(name, name_length, NULL, NULL, NULL); if(name_utf8) { #if GLIB_CHECK_VERSION (2, 30, 0) @@ -482,10 +485,14 @@ xfdesktop_settings_image_iconview_add(GtkTreeModel *model, name_markup = g_markup_printf_escaped(_("<b>%s</b>\nType: %s\nSize: %s"), name_utf8, content_type, size_string); + /* create a case sensitive collation key for sorting filenames like + * Thunar does */ + collate_key = g_utf8_collate_key_for_filename(name, name_length); + /* Insert sorted */ valid = gtk_tree_model_get_iter_first(model, &search_iter); while(valid && !found) { - if(image_list_compare(model, name_markup, &search_iter) <= 0) { + if(image_list_compare(model, collate_key, &search_iter) <= 0) { found = TRUE; } else { valid = gtk_tree_model_iter_next(model, &search_iter); @@ -498,6 +505,7 @@ xfdesktop_settings_image_iconview_add(GtkTreeModel *model, position, COL_NAME, name_markup, COL_FILENAME, path, + COL_COLLATE_KEY, collate_key, -1); xfdesktop_settings_queue_preview(model, &iter, panel); @@ -509,6 +517,7 @@ xfdesktop_settings_image_iconview_add(GtkTreeModel *model, g_free(name_utf8); g_free(name_markup); g_free(size_string); + g_free(collate_key); if(added) return gtk_tree_iter_copy(&iter); @@ -602,7 +611,7 @@ xfdesktop_image_list_add_dir(GObject *source_object, dir_data->panel = panel; dir_data->ls = gtk_list_store_new(N_COLS, GDK_TYPE_PIXBUF, G_TYPE_STRING, - G_TYPE_STRING, G_TYPE_STRING); + G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); /* Get the last image/current image displayed so we can select it in the * icon view */ |