diff --git a/po/POTFILES.in b/po/POTFILES.in index 081a892169cdca02b6863597372cba7dfd98cc22..6d7f2ef87a66ec44886d864f07a9f3d136dbcd81 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -11,7 +11,6 @@ src/gui/calendar-management/gcal-calendars-page.c src/gui/calendar-management/gcal-calendars-page.ui src/gui/calendar-management/gcal-edit-calendar-page.c src/gui/calendar-management/gcal-edit-calendar-page.ui -src/gui/calendar-management/gcal-file-chooser-button.c src/gui/calendar-management/gcal-new-calendar-page.c src/gui/calendar-management/gcal-new-calendar-page.ui src/gui/event-editor/gcal-alarm-row.c diff --git a/src/gui/calendar-management/gcal-file-chooser-button.c b/src/gui/calendar-management/gcal-file-chooser-button.c deleted file mode 100644 index 9a3b15bfc62418c26fc251278ff4435b6ee1b4f0..0000000000000000000000000000000000000000 --- a/src/gui/calendar-management/gcal-file-chooser-button.c +++ /dev/null @@ -1,271 +0,0 @@ -/* gcal-file-chooser-button.c - * - * Copyright 2021 Georges Basile Stavracas Neto - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * SPDX-License-Identifier: GPL-3.0-or-later - */ - -#include "gcal-file-chooser-button.h" - -#include - -struct _GcalFileChooserButton -{ - GtkButton parent_instance; - - GCancellable *cancellable; - GtkFileFilter *filter; - GFile *file; - gchar *title; -}; - -G_DEFINE_FINAL_TYPE (GcalFileChooserButton, gcal_file_chooser_button, GTK_TYPE_BUTTON) - -enum -{ - PROP_0, - PROP_FILE, - PROP_FILTER, - PROP_TITLE, - N_PROPS -}; - -static GParamSpec *properties [N_PROPS] = { NULL, }; - -static const gchar * -get_title (GcalFileChooserButton *self) -{ - return self->title ? self->title : _("Select a file"); -} - -static void -update_label (GcalFileChooserButton *self) -{ - g_autofree gchar *label = NULL; - - if (self->file) - label = g_file_get_basename (self->file); - else - label = g_strdup (get_title (self)); - - gtk_button_set_label (GTK_BUTTON (self), label); -} - -static void -on_file_opened_cb (GObject *source, - GAsyncResult *result, - gpointer user_data) -{ - GcalFileChooserButton *self; - g_autoptr (GError) error = NULL; - g_autoptr (GFile) file = NULL; - - 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); - } - - self = GCAL_FILE_CHOOSER_BUTTON (user_data); - gcal_file_chooser_button_set_file (self, file); -} - -static void -gcal_file_chooser_button_clicked (GtkButton *button) -{ - 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 -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); -} - -static void -gcal_file_chooser_button_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - GcalFileChooserButton *self = GCAL_FILE_CHOOSER_BUTTON (object); - - switch (prop_id) - { - case PROP_FILE: - 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; - - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - } -} - -static void -gcal_file_chooser_button_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - GcalFileChooserButton *self = GCAL_FILE_CHOOSER_BUTTON (object); - - switch (prop_id) - { - case PROP_FILE: - 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; - - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - } -} - -static void -gcal_file_chooser_button_class_init (GcalFileChooserButtonClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - GtkButtonClass *button_class = GTK_BUTTON_CLASS (klass); - - button_class->clicked = gcal_file_chooser_button_clicked; - - object_class->finalize = gcal_file_chooser_button_finalize; - object_class->get_property = gcal_file_chooser_button_get_property; - object_class->set_property = gcal_file_chooser_button_set_property; - - 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); -} - -static void -gcal_file_chooser_button_init (GcalFileChooserButton *self) -{ - self->cancellable = g_cancellable_new (); - - update_label (self); -} - -GtkWidget* -gcal_file_chooser_button_new (void) -{ - return g_object_new (GCAL_TYPE_FILE_CHOOSER_BUTTON, NULL); -} - -void -gcal_file_chooser_button_set_file (GcalFileChooserButton *self, - GFile *file) -{ - g_return_if_fail (GCAL_IS_FILE_CHOOSER_BUTTON (self)); - - if (g_set_object (&self->file, file)) - { - update_label (self); - g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_FILE]); - } -} - -GFile * -gcal_file_chooser_button_get_file (GcalFileChooserButton *self) -{ - g_return_val_if_fail (GCAL_IS_FILE_CHOOSER_BUTTON (self), NULL); - - return self->file ? g_object_ref (self->file) : NULL; -} - -void -gcal_file_chooser_button_set_title (GcalFileChooserButton *self, - const gchar *title) -{ - g_autofree gchar *old_title = NULL; - - g_return_if_fail (GCAL_IS_FILE_CHOOSER_BUTTON (self)); - - old_title = g_steal_pointer (&self->title); - self->title = g_strdup (title); - - update_label (self); - - g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_TITLE]); -} - -const gchar* -gcal_file_chooser_button_get_title (GcalFileChooserButton *self) -{ - g_return_val_if_fail (GCAL_IS_FILE_CHOOSER_BUTTON (self), NULL); - - return self->title; -} - -void -gcal_file_chooser_button_set_filter (GcalFileChooserButton *self, - GtkFileFilter *filter) -{ - g_return_if_fail (GCAL_IS_FILE_CHOOSER_BUTTON (self)); - g_return_if_fail (filter == NULL || GTK_IS_FILE_FILTER (filter)); - - 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 deleted file mode 100644 index 103dc35867f620138d7d7c67965b1c37f548031f..0000000000000000000000000000000000000000 --- a/src/gui/calendar-management/gcal-file-chooser-button.h +++ /dev/null @@ -1,45 +0,0 @@ -/* gcal-file-chooser-button.h - * - * Copyright 2021 Georges Basile Stavracas Neto - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * SPDX-License-Identifier: GPL-3.0-or-later - */ - -#pragma once - -#include - -G_BEGIN_DECLS - -#define GCAL_TYPE_FILE_CHOOSER_BUTTON (gcal_file_chooser_button_get_type()) -G_DECLARE_FINAL_TYPE (GcalFileChooserButton, gcal_file_chooser_button, GCAL, FILE_CHOOSER_BUTTON, GtkButton) - -GtkWidget* gcal_file_chooser_button_new (void); - -void gcal_file_chooser_button_set_file (GcalFileChooserButton *self, - GFile *file); - -GFile* gcal_file_chooser_button_get_file (GcalFileChooserButton *self); - -void gcal_file_chooser_button_set_title (GcalFileChooserButton *self, - const char *title); - -const gchar* gcal_file_chooser_button_get_title (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 fcd0283be20cb7f17856ec2f400afb4ab577b86f..de1521a2a621daf8df3ed431689c635ff1c7aad5 100644 --- a/src/gui/calendar-management/gcal-new-calendar-page.c +++ b/src/gui/calendar-management/gcal-new-calendar-page.c @@ -27,7 +27,6 @@ #include "gcal-context.h" #include "gcal-calendar-management-page.h" #include "gcal-debug.h" -#include "gcal-file-chooser-button.h" #include "gcal-new-calendar-page.h" #include "gcal-source-discoverer.h" #include "gcal-utils.h" @@ -49,7 +48,6 @@ struct _GcalNewCalendarPage GtkWidget *add_button; GtkEntry *calendar_address_entry; EntryState calendar_address_entry_state; - GcalFileChooserButton *calendar_file_chooser_button; AdwMessageDialog *credentials_dialog; GtkEntry *credentials_password_entry; GtkEntry *credentials_user_entry; @@ -294,49 +292,6 @@ discover_sources (GcalNewCalendarPage *self) * Callbacks */ -static void -on_file_chooser_button_file_changed_cb (GcalFileChooserButton *chooser, - GParamSpec *pspec, - GcalNewCalendarPage *self) -{ - g_autofree gchar *display_name = NULL; - g_autoptr (ESource) source = NULL; - g_autoptr (GFile) file = NULL; - ESourceExtension *ext; - - GCAL_ENTRY; - - file = gcal_file_chooser_button_get_file (chooser); - - if (!file) - GCAL_RETURN (); - - /* Create the new source and add the needed extensions */ - source = e_source_new (NULL, NULL, NULL); - e_source_set_parent (source, "local-stub"); - - ext = e_source_get_extension (source, E_SOURCE_EXTENSION_CALENDAR); - e_source_backend_set_backend_name (E_SOURCE_BACKEND (ext), "local"); - - ext = e_source_get_extension (source, E_SOURCE_EXTENSION_LOCAL_BACKEND); - e_source_local_set_custom_file (E_SOURCE_LOCAL (ext), file); - - /* update the source properties */ - display_name = calendar_path_to_name_suggestion (file); - e_source_set_display_name (source, display_name); - - /* TODO: report errors */ - gcal_manager_save_source (gcal_context_get_manager (self->context), source); - - gcal_calendar_management_page_switch_page (GCAL_CALENDAR_MANAGEMENT_PAGE (self), - "calendars", - NULL); - - gcal_file_chooser_button_set_file (self->calendar_file_chooser_button, NULL); - - GCAL_EXIT; -} - static gboolean pulse_web_entry (gpointer data) { @@ -667,13 +622,10 @@ gcal_new_calendar_page_class_init (GcalNewCalendarPageClass *klass) g_object_class_override_property (object_class, PROP_CONTEXT, "context"); - g_type_ensure (GCAL_TYPE_FILE_CHOOSER_BUTTON); - gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/calendar/ui/gui/calendar-management/gcal-new-calendar-page.ui"); 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, credentials_dialog); gtk_widget_class_bind_template_child (widget_class, GcalNewCalendarPage, credentials_password_entry); gtk_widget_class_bind_template_child (widget_class, GcalNewCalendarPage, credentials_user_entry); @@ -685,7 +637,6 @@ gcal_new_calendar_page_class_init (GcalNewCalendarPageClass *klass) gtk_widget_class_bind_template_callback (widget_class, on_add_button_clicked_cb); gtk_widget_class_bind_template_callback (widget_class, on_calendar_address_activated_cb); gtk_widget_class_bind_template_callback (widget_class, on_credentials_dialog_response_cb); - gtk_widget_class_bind_template_callback (widget_class, on_file_chooser_button_file_changed_cb); gtk_widget_class_bind_template_callback (widget_class, on_local_calendar_name_row_text_changed_cb); gtk_widget_class_bind_template_callback (widget_class, on_local_calendar_color_button_rgba_changed_cb); gtk_widget_class_bind_template_callback (widget_class, on_url_entry_text_changed_cb); diff --git a/src/gui/calendar-management/gcal-new-calendar-page.ui b/src/gui/calendar-management/gcal-new-calendar-page.ui index b951c4dfd9da718b7a7114dea9c0c9ef06578c96..39165532935fa29d7ddb44df0d7340775b368cf8 100644 --- a/src/gui/calendar-management/gcal-new-calendar-page.ui +++ b/src/gui/calendar-management/gcal-new-calendar-page.ui @@ -20,6 +20,7 @@ + Create a Local Calendar @@ -56,18 +57,7 @@ - - - - True - Import a Calendar - 0.0 - - - - - - + Connect to an Online Calendar @@ -77,7 +67,7 @@ - Alternatively, enter the web address of an online calendar you want to import, or open a supported calendar file. + HTTPS, CalDAV, or Webcal URLs are supported. Online calendars that can only be updated by the provider will be added as read-only. True 0 @@ -103,30 +93,6 @@ - - - - Open a File - - - Calendar files - - *.ical - *.icalendar - *.ics - *.ifb - *.vcs - - - - - - 1 - 1 - - - - slide-down diff --git a/src/gui/calendar-management/meson.build b/src/gui/calendar-management/meson.build index d4f92849560bb3a6749d7affe64c65d703ed2400..d8c51c4002a77d3d9629377840b4454c237c38df 100644 --- a/src/gui/calendar-management/meson.build +++ b/src/gui/calendar-management/meson.build @@ -11,6 +11,5 @@ sources += files( 'gcal-calendar-management-page.c', 'gcal-calendars-page.c', 'gcal-edit-calendar-page.c', - 'gcal-file-chooser-button.c', 'gcal-new-calendar-page.c', )