From 8ff3a843b31b3324ed3fa8600ce3c368adaccf86 Mon Sep 17 00:00:00 2001 From: Hari Rana Date: Mon, 29 Jul 2024 20:08:18 -0400 Subject: [PATCH 1/3] utils: Add function to create writable-only calendars lists --- src/utils/gcal-utils.c | 26 ++++++++++++++++++++++++++ src/utils/gcal-utils.h | 2 ++ 2 files changed, 28 insertions(+) diff --git a/src/utils/gcal-utils.c b/src/utils/gcal-utils.c index d2721b510..c78549f8a 100644 --- a/src/utils/gcal-utils.c +++ b/src/utils/gcal-utils.c @@ -1356,3 +1356,29 @@ gcal_create_soup_session (void) return g_steal_pointer (&session); } + +/** + * gcal_create_writable_calendars_model: + * @manager: a #GcalManager + * + * Retrieves a model with all available read-write #GcalCalendar. + * This is useful for binding to combo rows. + * + * Returns: (transfer full): a #GListModel with all available read-write #GcalCalendar + */ +GListModel* +gcal_create_writable_calendars_model (GcalManager *manager) +{ + GtkBoolFilter *bool_filter; + GtkExpression *expression; + + g_return_val_if_fail (GCAL_IS_MANAGER (manager), NULL); + + expression = gtk_property_expression_new (GCAL_TYPE_CALENDAR, NULL, "read-only"); + + bool_filter = gtk_bool_filter_new (expression); + gtk_bool_filter_set_invert (bool_filter, TRUE); + + return G_LIST_MODEL (gtk_filter_list_model_new (G_LIST_MODEL (gcal_manager_get_calendars_model (manager)), + GTK_FILTER (bool_filter))); +} diff --git a/src/utils/gcal-utils.h b/src/utils/gcal-utils.h index 721847a29..c5dd8d24d 100644 --- a/src/utils/gcal-utils.h +++ b/src/utils/gcal-utils.h @@ -141,4 +141,6 @@ const gchar* gcal_get_service_name_from_url (const gchar SoupSession * gcal_create_soup_session (void); +GListModel * gcal_create_writable_calendars_model (GcalManager *manager); + #endif /* __GCAL_UTILS_H__ */ -- GitLab From 26d34930b6ac7e2acce98a5aba9d29cf15147ee5 Mon Sep 17 00:00:00 2001 From: Hari Rana Date: Mon, 29 Jul 2024 20:09:31 -0400 Subject: [PATCH 2/3] event-editor: Only list writable calendars --- src/gui/event-editor/gcal-event-editor-dialog.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/event-editor/gcal-event-editor-dialog.c b/src/gui/event-editor/gcal-event-editor-dialog.c index 283fe0356..8db3a9fd8 100644 --- a/src/gui/event-editor/gcal-event-editor-dialog.c +++ b/src/gui/event-editor/gcal-event-editor-dialog.c @@ -210,13 +210,13 @@ create_row_func (gpointer data, static void setup_context (GcalEventEditorDialog *self) { + g_autoptr (GListModel) calendars = NULL; GcalManager *manager; - GListModel *calendars; GCAL_ENTRY; manager = gcal_context_get_manager (self->context); - calendars = gcal_manager_get_calendars_model (manager); + calendars = gcal_create_writable_calendars_model (manager); gtk_list_box_bind_model (self->calendars_listbox, calendars, create_row_func, self, NULL); -- GitLab From d7131d5141bb45aabf4c129e25a19f73798408a2 Mon Sep 17 00:00:00 2001 From: Hari Rana Date: Mon, 29 Jul 2024 20:09:53 -0400 Subject: [PATCH 3/3] import: Only list writable calendars --- src/gui/importer/gcal-import-dialog.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/gui/importer/gcal-import-dialog.c b/src/gui/importer/gcal-import-dialog.c index bf608364d..dd4199129 100644 --- a/src/gui/importer/gcal-import-dialog.c +++ b/src/gui/importer/gcal-import-dialog.c @@ -98,13 +98,13 @@ import_data_free (gpointer data) static void update_default_calendar (GcalImportDialog *self) { + g_autoptr (GListModel) calendars = NULL; GcalCalendar *default_calendar; GcalManager *manager; - GListModel *calendars; guint position; manager = gcal_context_get_manager (self->context); - calendars = gcal_manager_get_calendars_model (manager); + calendars = gcal_create_writable_calendars_model (manager); default_calendar = gcal_manager_get_default_calendar (manager); if (default_calendar && g_list_store_find (G_LIST_STORE (calendars), default_calendar, &position)) @@ -114,15 +114,17 @@ update_default_calendar (GcalImportDialog *self) static void setup_calendars (GcalImportDialog *self) { + g_autoptr (GListModel) calendars = NULL; GcalManager *manager; g_assert (self->context != NULL); manager = gcal_context_get_manager (self->context); + calendars = gcal_create_writable_calendars_model (manager); // TODO: sort model - adw_combo_row_set_model (self->calendar_combo_row, gcal_manager_get_calendars_model (manager)); + adw_combo_row_set_model (self->calendar_combo_row, calendars); update_default_calendar (self); g_signal_connect_object (manager, "notify::default-calendar", G_CALLBACK (update_default_calendar), self, G_CONNECT_SWAPPED); -- GitLab