calendar-manager/new: Switch to GtkFileDialog
Cleans up a few more compiler warnings.
This commit is contained in:
@@ -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;
|
||||
GcalFileChooserButton *self;
|
||||
g_autoptr (GError) error = NULL;
|
||||
g_autoptr (GFile) file = NULL;
|
||||
|
||||
file = gtk_file_chooser_get_file (filechooser);
|
||||
gcal_file_chooser_button_set_file (self, file);
|
||||
file = gtk_file_dialog_open_finish (GTK_FILE_DIALOG (source), result, &error);
|
||||
|
||||
if (error)
|
||||
{
|
||||
if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
|
||||
return;
|
||||
|
||||
g_warning ("Error opening file: %s", error->message);
|
||||
}
|
||||
|
||||
gtk_widget_set_visible (GTK_WIDGET (filechooser), FALSE);
|
||||
self = GCAL_FILE_CHOOSER_BUTTON (user_data);
|
||||
gcal_file_chooser_button_set_file (self, file);
|
||||
}
|
||||
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);
|
||||
|
||||
if (self->file)
|
||||
gtk_file_chooser_set_file (GTK_FILE_CHOOSER (dialog), self->file, NULL);
|
||||
|
||||
g_signal_connect (dialog, "response", G_CALLBACK (on_filechooser_dialog_response_cb), self);
|
||||
|
||||
self->filechooser = GTK_FILE_CHOOSER (dialog);
|
||||
}
|
||||
|
||||
|
||||
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));
|
||||
g_autoptr (GtkFileDialog) file_dialog = NULL;
|
||||
GcalFileChooserButton *self;
|
||||
GtkRoot *root;
|
||||
|
||||
ensure_filechooser (self);
|
||||
self = GCAL_FILE_CHOOSER_BUTTON (button);
|
||||
root = gtk_widget_get_root (GTK_WIDGET (self));
|
||||
|
||||
gtk_window_set_transient_for (GTK_WINDOW (self->filechooser), GTK_WINDOW (native));
|
||||
gtk_window_present (GTK_WINDOW (self->filechooser));
|
||||
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);
|
||||
g_return_if_fail (GCAL_IS_FILE_CHOOSER_BUTTON (self));
|
||||
g_return_if_fail (filter == NULL || GTK_IS_FILE_FILTER (filter));
|
||||
|
||||
ensure_filechooser (self);
|
||||
|
||||
return self->filechooser;
|
||||
if (g_set_object (&self->filter, filter))
|
||||
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_FILTER]);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user