Mercurial > hg > forks > geeqie
changeset 2406:16fcfac12c77
Fix #417: Natural sort order
https://github.com/BestImageViewer/geeqie/issues/417
Refer also to commit bd34c324c92456f5182579d6922d7aba664f93c3
Include an option on the Files tab of Preferences to permit the
selection of either g_utf8_collate_key() or
g_utf8_collate_key_for_filename() for the sort order of files and
folders
author | Colin Clark <cclark@mcb.net> |
---|---|
date | Tue, 13 Dec 2016 20:12:06 +0000 |
parents | eb6d9ba8a759 |
children | e7901e526fbb |
files | doc/docbook/GuideOptionsFiltering.xml src/filedata.c src/options.c src/options.h src/preferences.c src/rcfile.c |
diffstat | 6 files changed, 29 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/doc/docbook/GuideOptionsFiltering.xml Sun Dec 04 09:33:33 2016 +0100 +++ b/doc/docbook/GuideOptionsFiltering.xml Tue Dec 13 20:12:06 2016 +0000 @@ -37,6 +37,14 @@ </varlistentry> <varlistentry> <term> + <guilabel>Natural sort order</guilabel> + </term> + <listitem> + <para>Files and folders are sorted with the dot '.' treated as a special case, so the order is e.g. "event.c" "event.h" "eventgenerator.c". Also, files containing numbers are sorted as "file1" "file5" "file10".</para> + </listitem> + </varlistentry> + <varlistentry> + <term> <guilabel>Disable file extension checks</guilabel> </term> <listitem>
--- a/src/filedata.c Sun Dec 04 09:33:33 2016 +0100 +++ b/src/filedata.c Tue Dec 13 20:12:06 2016 +0000 @@ -279,8 +279,21 @@ g_free(fd->collate_key_name); g_free(fd->collate_key_name_nocase); +#if GTK_CHECK_VERSION(2, 8, 0) + if (options->file_sort.natural) + { + fd->collate_key_name = g_utf8_collate_key_for_filename(fd->name, -1); + fd->collate_key_name_nocase = g_utf8_collate_key_for_filename(caseless_name, -1); + } + else + { + fd->collate_key_name = g_utf8_collate_key(valid_name, -1); + fd->collate_key_name_nocase = g_utf8_collate_key(caseless_name, -1); + } +#else fd->collate_key_name = g_utf8_collate_key(valid_name, -1); fd->collate_key_name_nocase = g_utf8_collate_key(caseless_name, -1); +#endif g_free(valid_name); g_free(caseless_name);
--- a/src/options.c Sun Dec 04 09:33:33 2016 +0100 +++ b/src/options.c Tue Dec 13 20:12:06 2016 +0000 @@ -69,6 +69,7 @@ options->file_sort.ascending = TRUE; options->file_sort.case_sensitive = FALSE; options->file_sort.method = SORT_NAME; + options->file_sort.natural = FALSE; options->fullscreen.above = FALSE; options->fullscreen.clean_flip = FALSE;
--- a/src/options.h Sun Dec 04 09:33:33 2016 +0100 +++ b/src/options.h Tue Dec 13 20:12:06 2016 +0000 @@ -129,6 +129,7 @@ SortType method; gboolean ascending; gboolean case_sensitive; /* file sorting method (case) */ + gboolean natural; } file_sort; /* slideshow */
--- a/src/preferences.c Sun Dec 04 09:33:33 2016 +0100 +++ b/src/preferences.c Tue Dec 13 20:12:06 2016 +0000 @@ -216,6 +216,7 @@ if (options->file_filter.show_parent_directory != c_options->file_filter.show_parent_directory) refresh = TRUE; if (options->file_filter.show_dot_directory != c_options->file_filter.show_dot_directory) refresh = TRUE; if (options->file_sort.case_sensitive != c_options->file_sort.case_sensitive) refresh = TRUE; + if (options->file_sort.natural != c_options->file_sort.natural) refresh = TRUE; if (options->file_filter.disable_file_extension_checks != c_options->file_filter.disable_file_extension_checks) refresh = TRUE; if (options->file_filter.disable != c_options->file_filter.disable) refresh = TRUE; @@ -260,6 +261,7 @@ options->file_filter.disable_file_extension_checks = c_options->file_filter.disable_file_extension_checks; options->file_sort.case_sensitive = c_options->file_sort.case_sensitive; + options->file_sort.natural = c_options->file_sort.natural; options->file_filter.disable = c_options->file_filter.disable; config_entry_to_option(sidecar_ext_entry, &options->sidecar.ext, NULL); @@ -1704,6 +1706,8 @@ options->file_filter.show_parent_directory, &c_options->file_filter.show_parent_directory); pref_checkbox_new_int(group, _("Case sensitive sort"), options->file_sort.case_sensitive, &c_options->file_sort.case_sensitive); + pref_checkbox_new_int(group, _("Natural sort order"), + options->file_sort.natural, &c_options->file_sort.natural); pref_checkbox_new_int(group, _("Disable file extension checks"), options->file_filter.disable_file_extension_checks, &c_options->file_filter.disable_file_extension_checks);
--- a/src/rcfile.c Sun Dec 04 09:33:33 2016 +0100 +++ b/src/rcfile.c Tue Dec 13 20:12:06 2016 +0000 @@ -353,6 +353,7 @@ WRITE_NL(); WRITE_INT(*options, file_sort.method); WRITE_NL(); WRITE_BOOL(*options, file_sort.ascending); WRITE_NL(); WRITE_BOOL(*options, file_sort.case_sensitive); + WRITE_NL(); WRITE_BOOL(*options, file_sort.natural); /* Fullscreen Options */ WRITE_NL(); WRITE_INT(*options, fullscreen.screen); @@ -623,6 +624,7 @@ if (READ_UINT(*options, file_sort.method)) continue; if (READ_BOOL(*options, file_sort.ascending)) continue; if (READ_BOOL(*options, file_sort.case_sensitive)) continue; + if (READ_BOOL(*options, file_sort.natural)) continue; /* File operations *options */ if (READ_BOOL(*options, file_ops.enable_in_place_rename)) continue;