diff options
author | Benjamin Otte <otte@redhat.com> | 2023-03-29 10:39:11 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2023-04-01 20:49:40 +0200 |
commit | c760131f6ff99cc5db7c5327e5475cbabf8b3efa (patch) | |
tree | 3c53316ea40c34c48dc6a588a18f274887f914cc | |
parent | 880aea513f5921be2dc36bc93334add01ce6b5a9 (diff) | |
download | gtk+-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.c | 18 | ||||
-rw-r--r-- | gtk/ui/gtkfilechooserwidget.ui | 5 |
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> |