From 2a70093a309481cf633086a5e8f0c8bc6d2c89f0 Mon Sep 17 00:00:00 2001 From: Corey Berla Date: Mon, 10 Apr 2023 17:58:09 -0700 Subject: [PATCH] filechooser: Set date and time after cell is a child of filechooserwidget The date/time column relies on the filechooserwidget to format the date properly. During bind, the filechoosercell, get the filechooserwidget ancestor, but now due to changes in the listview, the cell isn't a child of the filechooserwidget at that point. Since this is deeply ingrained into the filechooserwidget, let's keep the same behavior, but move it to filechoosercell in realize. Alternatively, we could have used a signal factory (with the file chooser widget as the user data), but that would have been a major overhaul. --- gtk/gtkfilechoosercell.c | 36 ++++++++++++++++++++++++++++++- gtk/gtkfilechooserwidget.c | 14 ++++++------ gtk/gtkfilechooserwidgetprivate.h | 9 ++++++++ gtk/ui/gtkfilechooserwidget.ui | 11 +--------- 4 files changed, 51 insertions(+), 19 deletions(-) diff --git a/gtk/gtkfilechoosercell.c b/gtk/gtkfilechoosercell.c index 090d17d1ee..3098d7a2e9 100644 --- a/gtk/gtkfilechoosercell.c +++ b/gtk/gtkfilechoosercell.c @@ -28,6 +28,7 @@ #include "gtkgestureclick.h" #include "gtkgesturelongpress.h" #include "gtkicontheme.h" +#include "gtklabel.h" #include "gtkselectionmodel.h" #include "gtkfilechooserutils.h" #include "gtkfilechooserwidgetprivate.h" @@ -39,6 +40,7 @@ struct _GtkFileChooserCell GFileInfo *item; GtkColumnViewCell *list_item; + gboolean date_column; guint type_format; gboolean show_time; @@ -53,7 +55,8 @@ G_DEFINE_TYPE (GtkFileChooserCell, gtk_file_chooser_cell, GTK_TYPE_WIDGET) enum { - PROP_POSITION = 1, + PROP_DATE_COLUMN = 1, + PROP_POSITION, PROP_ITEM, PROP_SHOW_TIME, PROP_LIST_ITEM, @@ -168,6 +171,23 @@ gtk_file_chooser_cell_realize (GtkWidget *widget) GTK_TYPE_FILE_CHOOSER_WIDGET)); g_object_bind_property (impl, "show-time", self, "show-time", G_BINDING_SYNC_CREATE); + + if (self->date_column) + { + GtkWidget *box; + GtkWidget *label; + char *text; + + box = gtk_widget_get_first_child (GTK_WIDGET (self)); + label = gtk_widget_get_first_child (box); + text = gtk_file_chooser_widget_get_file_date (self->list_item, self->item); + gtk_label_set_text (GTK_LABEL (label), text); + g_free (text); + label = gtk_widget_get_last_child (box); + text = gtk_file_chooser_widget_get_file_time (self->list_item, self->item); + gtk_label_set_text (GTK_LABEL (label), text); + g_free (text); + } } static void @@ -227,6 +247,10 @@ gtk_file_chooser_cell_set_property (GObject *object, switch (prop_id) { + case PROP_DATE_COLUMN: + self->date_column = g_value_get_boolean (value); + break; + case PROP_ITEM: self->item = g_value_get_object (value); @@ -261,6 +285,10 @@ gtk_file_chooser_cell_get_property (GObject *object, switch (prop_id) { + case PROP_DATE_COLUMN: + g_value_set_boolean (value, self->date_column); + break; + case PROP_ITEM: g_value_set_object (value, self->item); break; @@ -286,6 +314,12 @@ gtk_file_chooser_cell_class_init (GtkFileChooserCellClass *klass) object_class->set_property = gtk_file_chooser_cell_set_property; object_class->get_property = gtk_file_chooser_cell_get_property; + g_object_class_install_property (object_class, PROP_DATE_COLUMN, + g_param_spec_boolean ("date-column", NULL, NULL, + FALSE, + GTK_PARAM_READWRITE)); + + g_object_class_install_property (object_class, PROP_ITEM, g_param_spec_object ("item", NULL, NULL, G_TYPE_FILE_INFO, diff --git a/gtk/gtkfilechooserwidget.c b/gtk/gtkfilechooserwidget.c index 92ec6c7ad2..51607dfe87 100644 --- a/gtk/gtkfilechooserwidget.c +++ b/gtk/gtkfilechooserwidget.c @@ -1945,9 +1945,9 @@ files_list_restrict_key_presses (GtkEventControllerKey *controller, return GDK_EVENT_PROPAGATE; } -static char * -column_view_get_file_date (GtkColumnViewCell *cell, - GFileInfo *info) +char * +gtk_file_chooser_widget_get_file_date (GtkColumnViewCell *cell, + GFileInfo *info) { GtkFileChooserWidget *impl; glong time; @@ -1981,9 +1981,9 @@ column_view_get_file_display_name (GtkColumnViewCell *cell, return NULL; } -static char * -column_view_get_file_time (GtkColumnViewCell *cell, - GFileInfo *info) +char * +gtk_file_chooser_widget_get_file_time (GtkColumnViewCell *cell, + GFileInfo *info) { GtkFileChooserWidget *impl; glong time; @@ -6847,9 +6847,7 @@ gtk_file_chooser_widget_class_init (GtkFileChooserWidgetClass *class) gtk_widget_class_bind_template_callback (widget_class, rename_file_name_changed); gtk_widget_class_bind_template_callback (widget_class, rename_file_rename_clicked); gtk_widget_class_bind_template_callback (widget_class, rename_file_end); - gtk_widget_class_bind_template_callback (widget_class, column_view_get_file_date); gtk_widget_class_bind_template_callback (widget_class, column_view_get_file_display_name); - gtk_widget_class_bind_template_callback (widget_class, column_view_get_file_time); 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); diff --git a/gtk/gtkfilechooserwidgetprivate.h b/gtk/gtkfilechooserwidgetprivate.h index 319209c58d..e99e60cbdd 100644 --- a/gtk/gtkfilechooserwidgetprivate.h +++ b/gtk/gtkfilechooserwidgetprivate.h @@ -22,6 +22,7 @@ #include #include "deprecated/gtkfilechooserwidget.h" +#include "gtkcolumnviewcell.h" #include "gtkselectionmodel.h" G_BEGIN_DECLS @@ -36,6 +37,14 @@ gtk_file_chooser_widget_should_respond (GtkFileChooserWidget *chooser); void gtk_file_chooser_widget_initial_focus (GtkFileChooserWidget *chooser); +char * +gtk_file_chooser_widget_get_file_date (GtkColumnViewCell *cell, + GFileInfo *info); + +char * +gtk_file_chooser_widget_get_file_time (GtkColumnViewCell *cell, + GFileInfo *info); + GSList * gtk_file_chooser_widget_get_selected_files (GtkFileChooserWidget *impl); diff --git a/gtk/ui/gtkfilechooserwidget.ui b/gtk/ui/gtkfilechooserwidget.ui index c3f193973b..acc3b57e94 100644 --- a/gtk/ui/gtkfilechooserwidget.ui +++ b/gtk/ui/gtkfilechooserwidget.ui @@ -378,6 +378,7 @@ GtkColumnViewCell GtkColumnViewCell + true 6 @@ -388,21 +389,11 @@ - - - GtkColumnViewCell - - - - - GtkColumnViewCell - - -- 2.30.2