File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -53,6 +53,7 @@ class FileDialogWindow : public Window
5353 struct Item
5454 {
5555 string filename;
56+ string sort_key;
5657 bool is_dir;
5758 };
5859 vector<Item> items;
@@ -351,27 +352,24 @@ class FileDialogWindow : public Window
351352 items.push_back (parent_item);
352353 }
353354
355+ for (auto & item : items)
356+ {
357+ char *utf8_valid_name = g_utf8_make_valid (item.filename .c_str (), -1 );
358+ char *name_nocase = g_utf8_casefold (utf8_valid_name, -1 );
359+ char *sort_key = g_utf8_collate_key_for_filename (name_nocase, -1 );
360+ item.sort_key = sort_key;
361+ g_free (sort_key);
362+ g_free (name_nocase);
363+ g_free (utf8_valid_name);
364+ }
365+
354366 std::sort (items.begin (), items.end (), [](Item& i1, Item& i2) {
355367 int d1 = i1.is_dir ;
356368 int d2 = i2.is_dir ;
357369 if (d1 != d2)
358370 return d1 > d2; // directories first
359371
360- auto sort_key = [] (const string& filename)
361- {
362- char *utf8_valid_name = g_utf8_make_valid (filename.c_str (), -1 );
363- char *name_nocase = g_utf8_casefold (utf8_valid_name, -1 );
364- char *key = g_utf8_collate_key_for_filename (name_nocase, -1 );
365- string ks = key;
366- g_free (key);
367- g_free (name_nocase);
368- g_free (utf8_valid_name);
369-
370- return ks;
371- };
372- string ks1 = sort_key (i1.filename );
373- string ks2 = sort_key (i2.filename );
374- return ks1 < ks2;
372+ return i1.sort_key < i2.sort_key ;
375373 });
376374 for (auto item : items)
377375 {
You can’t perform that action at this time.
0 commit comments