diff options
| author | Corey Berla <corey@berla.me> | 2022-10-19 12:42:56 -0700 |
|---|---|---|
| committer | Matthias Clasen <mclasen@redhat.com> | 2022-10-20 22:34:41 -0400 |
| commit | e27fa336900482c753e088f6eca720912db24d40 (patch) | |
| tree | 97255a75c5ef1d13f51cae1fe0fb9ade932cafef | |
| parent | f7dfead861402d85e545d3991c85ac4e8f05c00a (diff) | |
| download | gtk+-e27fa336900482c753e088f6eca720912db24d40.tar.gz | |
filechooser: Add show-time property
The "Show Time" setting does not take immediate effect (only after
changing folders) because it's set as a single call to
column_view_get_time_visible() on the FileChooserCell creation.
Instead create a bind a show-time property that gets updated
as the setting is changed.
| -rw-r--r-- | gtk/gtkfilechoosercell.c | 30 | ||||
| -rw-r--r-- | gtk/gtkfilechooserwidget.c | 27 | ||||
| -rw-r--r-- | gtk/ui/gtkfilechooserwidget.ui | 6 |
3 files changed, 44 insertions, 19 deletions
diff --git a/gtk/gtkfilechoosercell.c b/gtk/gtkfilechoosercell.c index cb81322234..655f54c46f 100644 --- a/gtk/gtkfilechoosercell.c +++ b/gtk/gtkfilechoosercell.c @@ -40,6 +40,8 @@ struct _GtkFileChooserCell GFileInfo *item; gboolean selected; guint position; + + gboolean show_time; }; struct _GtkFileChooserCellClass @@ -54,6 +56,7 @@ enum PROP_POSITION = 1, PROP_SELECTED, PROP_ITEM, + PROP_SHOW_TIME, }; #define ICON_SIZE 16 @@ -145,6 +148,18 @@ drag_prepare_cb (GtkDragSource *source, } static void +gtk_file_chooser_cell_realize (GtkWidget *widget) +{ + GtkFileChooserCell *self = GTK_FILE_CHOOSER_CELL (widget); + GtkFileChooserWidget *impl; + + impl = GTK_FILE_CHOOSER_WIDGET (gtk_widget_get_ancestor (GTK_WIDGET (self), + GTK_TYPE_FILE_CHOOSER_WIDGET)); + + g_object_bind_property (impl, "show-time", self, "show-time", G_BINDING_SYNC_CREATE); +} + +static void gtk_file_chooser_cell_init (GtkFileChooserCell *self) { GtkGesture *gesture; @@ -161,6 +176,8 @@ gtk_file_chooser_cell_init (GtkFileChooserCell *self) drag_source = gtk_drag_source_new (); gtk_widget_add_controller (GTK_WIDGET (self), GTK_EVENT_CONTROLLER (drag_source)); g_signal_connect (drag_source, "prepare", G_CALLBACK (drag_prepare_cb), self); + + g_signal_connect (self, "realize", G_CALLBACK (gtk_file_chooser_cell_realize), NULL); } static void @@ -196,6 +213,10 @@ gtk_file_chooser_cell_set_property (GObject *object, self->item = g_value_get_object (value); break; + case PROP_SHOW_TIME: + self->show_time = g_value_get_boolean (value); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -224,6 +245,10 @@ gtk_file_chooser_cell_get_property (GObject *object, g_value_set_object (value, self->item); break; + case PROP_SHOW_TIME: + g_value_set_boolean (value, self->show_time); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -256,6 +281,11 @@ gtk_file_chooser_cell_class_init (GtkFileChooserCellClass *klass) G_TYPE_FILE_INFO, GTK_PARAM_READWRITE)); + g_object_class_install_property (object_class, PROP_SHOW_TIME, + g_param_spec_boolean ("show-time", NULL, NULL, + FALSE, + GTK_PARAM_READWRITE)); + 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/gtkfilechooserwidget.c b/gtk/gtkfilechooserwidget.c index 8cbbb6055f..c289045090 100644 --- a/gtk/gtkfilechooserwidget.c +++ b/gtk/gtkfilechooserwidget.c @@ -125,7 +125,8 @@ G_GNUC_BEGIN_IGNORE_DEPRECATIONS enum { PROP_SEARCH_MODE = 1, - PROP_SUBTITLE + PROP_SUBTITLE, + PROP_SHOW_TIME, }; typedef enum { @@ -1539,6 +1540,7 @@ change_show_time_state (GSimpleAction *action, g_simple_action_set_state (action, state); impl->show_time = g_variant_get_boolean (state); + g_object_notify (G_OBJECT (impl), "show-time"); } /* Shows an error dialog about not being able to select a dragged file */ @@ -2065,19 +2067,6 @@ column_view_get_size (GtkListItem *item, return NULL; } -static gboolean -column_view_get_time_visible (GtkListItem *item) -{ - GtkFileChooserWidget *impl; - - impl = GTK_FILE_CHOOSER_WIDGET (gtk_widget_get_ancestor (gtk_list_item_get_child (item), - GTK_TYPE_FILE_CHOOSER_WIDGET)); - if (!impl) - return FALSE; - - return impl->show_time; -} - static char * column_view_get_tooltip_text (GtkListItem *list_item, GFileInfo *info) @@ -3018,6 +3007,10 @@ gtk_file_chooser_widget_get_property (GObject *object, g_value_take_string (value, gtk_file_chooser_widget_get_subtitle (impl)); break; + case PROP_SHOW_TIME: + g_value_set_boolean (value, impl->show_time); + break; + case GTK_FILE_CHOOSER_PROP_ACTION: g_value_set_enum (value, impl->action); break; @@ -6710,6 +6703,11 @@ gtk_file_chooser_widget_class_init (GtkFileChooserWidgetClass *class) "", GTK_PARAM_READABLE)); + g_object_class_install_property (gobject_class, PROP_SHOW_TIME, + g_param_spec_boolean ("show-time", NULL, NULL, + FALSE, + GTK_PARAM_READABLE)); + _gtk_file_chooser_install_properties (gobject_class); /* Bind class to template */ @@ -6772,7 +6770,6 @@ gtk_file_chooser_widget_class_init (GtkFileChooserWidgetClass *class) gtk_widget_class_bind_template_callback (widget_class, column_view_get_file_type); 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_time_visible); gtk_widget_class_bind_template_callback (widget_class, column_view_get_tooltip_text); gtk_widget_class_bind_template_callback (widget_class, column_view_row_activated_cb); diff --git a/gtk/ui/gtkfilechooserwidget.ui b/gtk/ui/gtkfilechooserwidget.ui index 5a12539965..703c956a3c 100644 --- a/gtk/ui/gtkfilechooserwidget.ui +++ b/gtk/ui/gtkfilechooserwidget.ui @@ -360,7 +360,7 @@ <interface> <template class="GtkListItem"> <property name="child"> - <object class="GtkFileChooserCell"> + <object class="GtkFileChooserCell" id="file_chooser_cell"> <binding name="position"> <lookup name="position">GtkListItem</lookup> </binding> @@ -389,9 +389,7 @@ </child> <child> <object class="GtkLabel"> - <binding name="visible"> - <closure type="gboolean" function="column_view_get_time_visible" /> - </binding> + <property name="visible" bind-source="file_chooser_cell" bind-property="show-time" bind-flags="sync-create"/> <binding name="label"> <closure type="gchararray" function="column_view_get_file_time"> <lookup name="item">GtkListItem</lookup> |
