From: Matthias Clasen Date: Fri, 10 Mar 2023 14:18:26 +0000 (+0100) Subject: filechooser: Set selectability for list items X-Git-Tag: archive/raspbian/4.12.3+ds-1+rpi1~1^2^2^2~22^2~5^2~31^2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=310662516b44d9abf3605d9521d2e8cafca23d9e;p=gtk4.git filechooser: Set selectability for list items We propagate this from the list items to the GtkListItems. Twisty! --- diff --git a/gtk/gtkfilechoosercell.c b/gtk/gtkfilechoosercell.c index 901e94d7b4..dd003bf93d 100644 --- a/gtk/gtkfilechoosercell.c +++ b/gtk/gtkfilechoosercell.c @@ -31,6 +31,7 @@ #include "gtkselectionmodel.h" #include "gtkfilechooserutils.h" #include "gtkfilechooserwidgetprivate.h" +#include "gtklistitem.h" struct _GtkFileChooserCell { @@ -39,6 +40,7 @@ struct _GtkFileChooserCell GFileInfo *item; gboolean selected; guint position; + GtkListItem *list_item; gboolean show_time; }; @@ -56,6 +58,7 @@ enum PROP_SELECTED, PROP_ITEM, PROP_SHOW_TIME, + PROP_LIST_ITEM, }; #define ICON_SIZE 16 @@ -206,6 +209,13 @@ get_selectable (GtkFileChooserCell *self) return TRUE; } +static void +update_list_item (GtkFileChooserCell *self) +{ + if (self->list_item) + gtk_list_item_set_selectable (self->list_item, get_selectable (self)); +} + static void gtk_file_chooser_cell_set_property (GObject *object, guint prop_id, @@ -231,12 +241,20 @@ gtk_file_chooser_cell_set_property (GObject *object, gtk_widget_remove_css_class (GTK_WIDGET (self), "dim-label"); else gtk_widget_add_css_class (GTK_WIDGET (self), "dim-label"); + + update_list_item (self); break; case PROP_SHOW_TIME: self->show_time = g_value_get_boolean (value); break; + case PROP_LIST_ITEM: + self->list_item = g_value_get_object (value); + + update_list_item (self); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -306,6 +324,11 @@ gtk_file_chooser_cell_class_init (GtkFileChooserCellClass *klass) FALSE, GTK_PARAM_READWRITE)); + g_object_class_install_property (object_class, PROP_LIST_ITEM, + g_param_spec_object ("list-item", NULL, NULL, + GTK_TYPE_LIST_ITEM, + GTK_PARAM_WRITABLE)); + gtk_widget_class_set_css_name (widget_class, I_("filelistcell")); gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT); } diff --git a/gtk/ui/gtkfilechooserwidget.ui b/gtk/ui/gtkfilechooserwidget.ui index f7a7c9a5ec..a5e4d3ca5d 100644 --- a/gtk/ui/gtkfilechooserwidget.ui +++ b/gtk/ui/gtkfilechooserwidget.ui @@ -193,6 +193,7 @@ GtkListItem + GtkListItem @@ -256,6 +257,7 @@ GtkListItem + GtkListItem 1 @@ -305,6 +307,7 @@ GtkListItem + GtkListItem 1 @@ -352,6 +355,7 @@ GtkListItem + GtkListItem 1 @@ -398,6 +402,7 @@ GtkListItem + GtkListItem 6 @@ -712,6 +717,7 @@ GtkListItem + GtkListItem vertical