summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorges Basile Stavracas Neto <georges.stavracas@gmail.com>2023-03-12 13:47:59 -0300
committerGeorges Basile Stavracas Neto <georges.stavracas@gmail.com>2023-03-16 12:30:15 +0000
commit4df39fa2ce4aa4e63f983f31e1818978d050f710 (patch)
treebd215d342c3695501d8ac1f82f002dff6bdd891d
parent501347f7973ec21c83c88fde1c05de33bd0fbb15 (diff)
downloadgnome-calendar-4df39fa2ce4aa4e63f983f31e1818978d050f710.tar.gz
calendar-manager/new: Switch to GtkFileDialog
Cleans up a few more compiler warnings.
-rw-r--r--src/gui/calendar-management/gcal-file-chooser-button.c113
-rw-r--r--src/gui/calendar-management/gcal-file-chooser-button.h3
-rw-r--r--src/gui/calendar-management/gcal-new-calendar-page.c9
-rw-r--r--src/gui/calendar-management/gcal-new-calendar-page.ui23
4 files changed, 72 insertions, 76 deletions
diff --git a/src/gui/calendar-management/gcal-file-chooser-button.c b/src/gui/calendar-management/gcal-file-chooser-button.c
index 6723a00d..9a3b15bf 100644
--- a/src/gui/calendar-management/gcal-file-chooser-button.c
+++ b/src/gui/calendar-management/gcal-file-chooser-button.c
@@ -26,7 +26,8 @@ struct _GcalFileChooserButton
{
GtkButton parent_instance;
- GtkFileChooser *filechooser;
+ GCancellable *cancellable;
+ GtkFileFilter *filter;
GFile *file;
gchar *title;
};
@@ -37,6 +38,7 @@ enum
{
PROP_0,
PROP_FILE,
+ PROP_FILTER,
PROP_TITLE,
N_PROPS
};
@@ -63,62 +65,47 @@ update_label (GcalFileChooserButton *self)
}
static void
-on_filechooser_dialog_response_cb (GtkFileChooser *filechooser,
- gint response,
- GcalFileChooserButton *self)
+on_file_opened_cb (GObject *source,
+ GAsyncResult *result,
+ gpointer user_data)
{
- if (response == GTK_RESPONSE_ACCEPT)
- {
- g_autoptr(GFile) file = NULL;
-
- file = gtk_file_chooser_get_file (filechooser);
- gcal_file_chooser_button_set_file (self, file);
- }
+ GcalFileChooserButton *self;
+ g_autoptr (GError) error = NULL;
+ g_autoptr (GFile) file = NULL;
- gtk_widget_set_visible (GTK_WIDGET (filechooser), FALSE);
-}
-static void
-ensure_filechooser (GcalFileChooserButton *self)
-{
- GtkNative *native;
- GtkWidget *dialog;
-
- if (self->filechooser)
- return;
-
- native = gtk_widget_get_native (GTK_WIDGET (self));
-
- dialog = gtk_file_chooser_dialog_new (get_title (self),
- GTK_WINDOW (native),
- GTK_FILE_CHOOSER_ACTION_OPEN,
- _("Cancel"),
- GTK_RESPONSE_CANCEL,
- _("Open"),
- GTK_RESPONSE_ACCEPT,
- NULL);
- gtk_window_set_destroy_with_parent (GTK_WINDOW (dialog), TRUE);
- gtk_window_set_hide_on_close (GTK_WINDOW (dialog), TRUE);
- gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
+ file = gtk_file_dialog_open_finish (GTK_FILE_DIALOG (source), result, &error);
- if (self->file)
- gtk_file_chooser_set_file (GTK_FILE_CHOOSER (dialog), self->file, NULL);
+ if (error)
+ {
+ if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+ return;
- g_signal_connect (dialog, "response", G_CALLBACK (on_filechooser_dialog_response_cb), self);
+ g_warning ("Error opening file: %s", error->message);
+ }
- self->filechooser = GTK_FILE_CHOOSER (dialog);
+ self = GCAL_FILE_CHOOSER_BUTTON (user_data);
+ gcal_file_chooser_button_set_file (self, file);
}
-
static void
gcal_file_chooser_button_clicked (GtkButton *button)
{
- GcalFileChooserButton *self = GCAL_FILE_CHOOSER_BUTTON (button);
- GtkNative *native = gtk_widget_get_native (GTK_WIDGET (self));
-
- ensure_filechooser (self);
-
- gtk_window_set_transient_for (GTK_WINDOW (self->filechooser), GTK_WINDOW (native));
- gtk_window_present (GTK_WINDOW (self->filechooser));
+ g_autoptr (GtkFileDialog) file_dialog = NULL;
+ GcalFileChooserButton *self;
+ GtkRoot *root;
+
+ self = GCAL_FILE_CHOOSER_BUTTON (button);
+ root = gtk_widget_get_root (GTK_WIDGET (self));
+
+ file_dialog = gtk_file_dialog_new ();
+ gtk_file_dialog_set_initial_file (file_dialog, self->file);
+ gtk_file_dialog_set_default_filter (file_dialog, self->filter);
+
+ gtk_file_dialog_open (file_dialog,
+ GTK_WINDOW (root),
+ self->cancellable,
+ on_file_opened_cb,
+ self);
}
static void
@@ -126,7 +113,11 @@ gcal_file_chooser_button_finalize (GObject *object)
{
GcalFileChooserButton *self = (GcalFileChooserButton *)object;
+ g_cancellable_cancel (self->cancellable);
+
g_clear_pointer (&self->title, g_free);
+ g_clear_object (&self->cancellable);
+ g_clear_object (&self->filter);
g_clear_object (&self->file);
G_OBJECT_CLASS (gcal_file_chooser_button_parent_class)->finalize (object);
@@ -146,6 +137,10 @@ gcal_file_chooser_button_get_property (GObject *object,
g_value_set_object (value, self->file);
break;
+ case PROP_FILTER:
+ g_value_set_object (value, self->filter);
+ break;
+
case PROP_TITLE:
g_value_set_string (value, self->title);
break;
@@ -169,6 +164,10 @@ gcal_file_chooser_button_set_property (GObject *object,
gcal_file_chooser_button_set_file (self, g_value_get_object (value));
break;
+ case PROP_FILTER:
+ gcal_file_chooser_button_set_filter (self, g_value_get_object (value));
+ break;
+
case PROP_TITLE:
gcal_file_chooser_button_set_title (self, g_value_get_string (value));
break;
@@ -193,6 +192,9 @@ gcal_file_chooser_button_class_init (GcalFileChooserButtonClass *klass)
properties[PROP_FILE] = g_param_spec_object ("file", "", "",
G_TYPE_FILE,
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
+ properties[PROP_FILTER] = g_param_spec_object ("filter", "", "",
+ GTK_TYPE_FILE_FILTER,
+ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
properties[PROP_TITLE] = g_param_spec_string ("title", "", "", NULL,
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
g_object_class_install_properties (object_class, N_PROPS, properties);
@@ -201,6 +203,8 @@ gcal_file_chooser_button_class_init (GcalFileChooserButtonClass *klass)
static void
gcal_file_chooser_button_init (GcalFileChooserButton *self)
{
+ self->cancellable = g_cancellable_new ();
+
update_label (self);
}
@@ -218,9 +222,7 @@ gcal_file_chooser_button_set_file (GcalFileChooserButton *self,
if (g_set_object (&self->file, file))
{
- gtk_file_chooser_set_file (self->filechooser, file, NULL);
update_label (self);
-
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_FILE]);
}
}
@@ -257,12 +259,13 @@ gcal_file_chooser_button_get_title (GcalFileChooserButton *self)
return self->title;
}
-GtkFileChooser*
-gcal_file_chooser_button_get_filechooser (GcalFileChooserButton *self)
+void
+gcal_file_chooser_button_set_filter (GcalFileChooserButton *self,
+ GtkFileFilter *filter)
{
- g_return_val_if_fail (GCAL_IS_FILE_CHOOSER_BUTTON (self), NULL);
-
- ensure_filechooser (self);
+ g_return_if_fail (GCAL_IS_FILE_CHOOSER_BUTTON (self));
+ g_return_if_fail (filter == NULL || GTK_IS_FILE_FILTER (filter));
- return self->filechooser;
+ if (g_set_object (&self->filter, filter))
+ g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_FILTER]);
}
diff --git a/src/gui/calendar-management/gcal-file-chooser-button.h b/src/gui/calendar-management/gcal-file-chooser-button.h
index bc1faa5a..103dc358 100644
--- a/src/gui/calendar-management/gcal-file-chooser-button.h
+++ b/src/gui/calendar-management/gcal-file-chooser-button.h
@@ -39,6 +39,7 @@ void gcal_file_chooser_button_set_title (GcalFileChoose
const gchar* gcal_file_chooser_button_get_title (GcalFileChooserButton *self);
-GtkFileChooser* gcal_file_chooser_button_get_filechooser (GcalFileChooserButton *self);
+void gcal_file_chooser_button_set_filter (GcalFileChooserButton *self,
+ GtkFileFilter *filter);
G_END_DECLS
diff --git a/src/gui/calendar-management/gcal-new-calendar-page.c b/src/gui/calendar-management/gcal-new-calendar-page.c
index 2993553b..4b5673ef 100644
--- a/src/gui/calendar-management/gcal-new-calendar-page.c
+++ b/src/gui/calendar-management/gcal-new-calendar-page.c
@@ -48,7 +48,6 @@ struct _GcalNewCalendarPage
GtkEntry *calendar_address_entry;
EntryState calendar_address_entry_state;
GcalFileChooserButton *calendar_file_chooser_button;
- GtkFileFilter *calendar_file_filter;
GtkWidget *cancel_button;
GtkWidget *credentials_cancel_button;
GtkWidget *credentials_connect_button;
@@ -659,7 +658,6 @@ gcal_new_calendar_page_class_init (GcalNewCalendarPageClass *klass)
gtk_widget_class_bind_template_child (widget_class, GcalNewCalendarPage, add_button);
gtk_widget_class_bind_template_child (widget_class, GcalNewCalendarPage, calendar_address_entry);
gtk_widget_class_bind_template_child (widget_class, GcalNewCalendarPage, calendar_file_chooser_button);
- gtk_widget_class_bind_template_child (widget_class, GcalNewCalendarPage, calendar_file_filter);
gtk_widget_class_bind_template_child (widget_class, GcalNewCalendarPage, cancel_button);
gtk_widget_class_bind_template_child (widget_class, GcalNewCalendarPage, credentials_cancel_button);
gtk_widget_class_bind_template_child (widget_class, GcalNewCalendarPage, credentials_connect_button);
@@ -686,14 +684,7 @@ gcal_new_calendar_page_class_init (GcalNewCalendarPageClass *klass)
static void
gcal_new_calendar_page_init (GcalNewCalendarPage *self)
{
- GtkFileChooser *chooser;
-
self->cancellable = g_cancellable_new ();
gtk_widget_init_template (GTK_WIDGET (self));
-
- gtk_file_filter_set_name (self->calendar_file_filter, _("Calendar files"));
-
- chooser = gcal_file_chooser_button_get_filechooser (self->calendar_file_chooser_button);
- gtk_file_chooser_add_filter (chooser, self->calendar_file_filter);
}
diff --git a/src/gui/calendar-management/gcal-new-calendar-page.ui b/src/gui/calendar-management/gcal-new-calendar-page.ui
index 62f598c3..3d006de2 100644
--- a/src/gui/calendar-management/gcal-new-calendar-page.ui
+++ b/src/gui/calendar-management/gcal-new-calendar-page.ui
@@ -98,6 +98,18 @@
<child>
<object class="GcalFileChooserButton" id="calendar_file_chooser_button">
<property name="title" translatable="yes">Open a File</property>
+ <property name="filter">
+ <object class="GtkFileFilter">
+ <property name="name" translatable="yes">Calendar files</property>
+ <patterns>
+ <pattern>*.ical</pattern>
+ <pattern>*.icalendar</pattern>
+ <pattern>*.ics</pattern>
+ <pattern>*.ifb</pattern>
+ <pattern>*.vcs</pattern>
+ </patterns>
+ </object>
+ </property>
<signal name="notify::file" handler="on_file_chooser_button_file_changed_cb" object="GcalNewCalendarPage" swapped="no" />
<layout>
<property name="column">1</property>
@@ -274,17 +286,6 @@
</child>
</object>
- <!-- Calendar file filter -->
- <object class="GtkFileFilter" id="calendar_file_filter">
- <patterns>
- <pattern>*.ical</pattern>
- <pattern>*.icalendar</pattern>
- <pattern>*.ics</pattern>
- <pattern>*.ifb</pattern>
- <pattern>*.vcs</pattern>
- </patterns>
- </object>
-
<!-- Headerbar buttons -->
<object class="GtkButton" id="cancel_button">
<property name="label" translatable="yes">Cancel</property>