summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2023-03-29 10:39:11 +0200
committerBenjamin Otte <otte@redhat.com>2023-04-01 20:49:40 +0200
commitc760131f6ff99cc5db7c5327e5475cbabf8b3efa (patch)
tree3c53316ea40c34c48dc6a588a18f274887f914cc
parent880aea513f5921be2dc36bc93334add01ce6b5a9 (diff)
downloadgtk+-c760131f6ff99cc5db7c5327e5475cbabf8b3efa.tar.gz
filechooser: Set a row-factory
This way, we can toggle per-row selectability and ensure files are not selectable in select-folder mode.
-rw-r--r--gtk/gtkfilechooserwidget.c18
-rw-r--r--gtk/ui/gtkfilechooserwidget.ui5
2 files changed, 22 insertions, 1 deletions
diff --git a/gtk/gtkfilechooserwidget.c b/gtk/gtkfilechooserwidget.c
index ace31f4bd8..cc7136f156 100644
--- a/gtk/gtkfilechooserwidget.c
+++ b/gtk/gtkfilechooserwidget.c
@@ -28,6 +28,7 @@
#include "gtkdropdown.h"
#include "gtkcolumnview.h"
#include "gtkcolumnviewcolumn.h"
+#include "gtkcolumnviewrow.h"
#include "gtkcssnumbervalueprivate.h"
#include "gtkdroptarget.h"
#include "gtkentry.h"
@@ -2023,6 +2024,20 @@ column_view_get_file_type (GtkListItem *item,
return get_type_information (impl, info);
}
+static void
+column_view_row_bind (GtkListItemFactory *factory,
+ GtkColumnViewRow *row,
+ gpointer unused)
+{
+ GFileInfo *info;
+ gboolean selectable;
+
+ info = gtk_column_view_row_get_item (row);
+ selectable = g_file_info_get_attribute_boolean (info, "filechooser::selectable");
+
+ gtk_column_view_row_set_selectable (row, selectable);
+}
+
static char *
file_chooser_get_location (GtkFileChooserWidget *impl,
GFileInfo *info)
@@ -6798,8 +6813,8 @@ gtk_file_chooser_widget_class_init (GtkFileChooserWidgetClass *class)
gtk_widget_class_bind_template_child (widget_class, GtkFileChooserWidget, column_view_location_column);
gtk_widget_class_bind_template_child (widget_class, GtkFileChooserWidget, column_view_size_column);
gtk_widget_class_bind_template_child (widget_class, GtkFileChooserWidget, column_view_time_column);
- gtk_widget_class_bind_template_child (widget_class, GtkFileChooserWidget, column_view_type_column);
gtk_widget_class_bind_template_child (widget_class, GtkFileChooserWidget, filter_combo_hbox);
+ gtk_widget_class_bind_template_child (widget_class, GtkFileChooserWidget, column_view_type_column);
gtk_widget_class_bind_template_child (widget_class, GtkFileChooserWidget, filter_combo);
gtk_widget_class_bind_template_child (widget_class, GtkFileChooserWidget, extra_align);
gtk_widget_class_bind_template_child (widget_class, GtkFileChooserWidget, extra_and_filters);
@@ -6840,6 +6855,7 @@ gtk_file_chooser_widget_class_init (GtkFileChooserWidgetClass *class)
gtk_widget_class_bind_template_callback (widget_class, column_view_get_location);
gtk_widget_class_bind_template_callback (widget_class, column_view_get_size);
gtk_widget_class_bind_template_callback (widget_class, column_view_get_tooltip_text);
+ gtk_widget_class_bind_template_callback (widget_class, column_view_row_bind);
gtk_widget_class_set_css_name (widget_class, I_("filechooser"));
diff --git a/gtk/ui/gtkfilechooserwidget.ui b/gtk/ui/gtkfilechooserwidget.ui
index 41f03a6def..884a9fc6a0 100644
--- a/gtk/ui/gtkfilechooserwidget.ui
+++ b/gtk/ui/gtkfilechooserwidget.ui
@@ -169,6 +169,11 @@
<style>
<class name="complex"/>
</style>
+ <property name="row-factory">
+ <object class="GtkSignalListItemFactory">
+ <signal name="bind" handler="column_view_row_bind" swapped="no"/>
+ </object>
+ </property>
<signal name="activate" handler="browse_files_view_row_activated_cb" swapped="no"/>
<signal name="keynav-failed" handler="browse_files_view_keynav_failed_cb"/>
<child>