[gtk/gbsneto/filechooser-column-view: 56/74] filechooserwidget: Use a string sorter for names
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/gbsneto/filechooser-column-view: 56/74] filechooserwidget: Use a string sorter for names
- Date: Fri, 21 Oct 2022 02:40:34 +0000 (UTC)
commit df49bf9eec70ced2ec281f0321b569b5325ef48d
Author: Matthias Clasen <mclasen redhat com>
Date: Tue Oct 11 23:30:43 2022 -0400
filechooserwidget: Use a string sorter for names
We can use the new collation property of GtkStringSorter,
and get the benefit of sort key caching. This commit
also fixes an accidental leak of all sorters, and
removes the sorter from the location column - we never
show that column when individual colummns are sortable.
gtk/gtkfilechooserwidget.c | 35 ++++++++++++++++++++++++++++++-----
1 file changed, 30 insertions(+), 5 deletions(-)
---
diff --git a/gtk/gtkfilechooserwidget.c b/gtk/gtkfilechooserwidget.c
index c5f28e0ec7..f462376ee8 100644
--- a/gtk/gtkfilechooserwidget.c
+++ b/gtk/gtkfilechooserwidget.c
@@ -96,7 +96,9 @@
#include "gtkfilterlistmodel.h"
#include "gtkcustomfilter.h"
#include "gtkcustomsorter.h"
+#include "gtkstringsorter.h"
#include "gtkmultisorter.h"
+#include "gtkexpression.h"
#ifndef G_OS_WIN32
#include "gopenuriportal.h"
@@ -7312,6 +7314,12 @@ search_sort_func (gconstpointer a,
return result;
}
+static char *
+get_name (GFileInfo *info)
+{
+ return g_strdup (g_file_info_get_display_name (info));
+}
+
static void
setup_sorting (GtkFileChooserWidget *impl)
{
@@ -7328,11 +7336,28 @@ setup_sorting (GtkFileChooserWidget *impl)
if (fsmodel == impl->browse_files_model)
{
- gtk_column_view_column_set_sorter (impl->column_view_name_column, GTK_SORTER (gtk_custom_sorter_new
(name_sort_func, impl, NULL)));
- gtk_column_view_column_set_sorter (impl->column_view_location_column, GTK_SORTER
(gtk_custom_sorter_new (location_sort_func, impl, NULL)));
- gtk_column_view_column_set_sorter (impl->column_view_size_column, GTK_SORTER (gtk_custom_sorter_new
(size_sort_func, impl, NULL)));
- gtk_column_view_column_set_sorter (impl->column_view_type_column, GTK_SORTER (gtk_custom_sorter_new
(type_sort_func, impl, NULL)));
- gtk_column_view_column_set_sorter (impl->column_view_time_column, GTK_SORTER (gtk_custom_sorter_new
(time_sort_func, impl, NULL)));
+ GtkExpression *expression;
+
+ expression = gtk_cclosure_expression_new (G_TYPE_STRING, NULL,
+ 0, NULL,
+ G_CALLBACK (get_name),
+ NULL, NULL);
+ sorter = GTK_SORTER (gtk_string_sorter_new (expression));
+ gtk_string_sorter_set_collation (GTK_STRING_SORTER (sorter), GTK_COLLATION_FILENAME);
+ gtk_column_view_column_set_sorter (impl->column_view_name_column, sorter);
+ g_object_unref (sorter);
+
+ sorter = GTK_SORTER (gtk_custom_sorter_new (size_sort_func, impl, NULL));
+ gtk_column_view_column_set_sorter (impl->column_view_size_column, sorter);
+ g_object_unref (sorter);
+
+ sorter = GTK_SORTER (gtk_custom_sorter_new (type_sort_func, impl, NULL));
+ gtk_column_view_column_set_sorter (impl->column_view_type_column, sorter);
+ g_object_unref (sorter);
+
+ sorter = GTK_SORTER (gtk_custom_sorter_new (time_sort_func, impl, NULL));
+ gtk_column_view_column_set_sorter (impl->column_view_time_column, sorter);
+ g_object_unref (sorter);
sorter = GTK_SORTER (gtk_multi_sorter_new ());
gtk_multi_sorter_append (GTK_MULTI_SORTER (sorter), GTK_SORTER (gtk_custom_sorter_new
(directory_sort_func, impl, NULL)));
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]