From f76659c7066deb71a7ff1a3ede94a56aa4828e5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Fortin=20Tam?= Date: Thu, 29 Feb 2024 15:54:45 -0500 Subject: [PATCH 1/3] import-dialog: Move parent source name color code Reading the `get_source_parent_name_color` call after `color_paintable`, one gets the impression they are somehow related, but they are not. Furthermore, this unfortunate location complicates my upcoming changes. Let's relocate that code next to the context where it is actually used. This improves clarity and maintainability. --- src/gui/importer/gcal-import-dialog.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/gui/importer/gcal-import-dialog.c b/src/gui/importer/gcal-import-dialog.c index 725e3c49a..029fd2a5e 100644 --- a/src/gui/importer/gcal-import-dialog.c +++ b/src/gui/importer/gcal-import-dialog.c @@ -307,10 +307,6 @@ on_combo_row_signal_factory_bind_cb (GtkSignalListItemFactory *factory, grid = gtk_list_item_get_child (item); color_paintable = get_circle_paintable_from_color (gcal_calendar_get_color (calendar), 16); - get_source_parent_name_color (gcal_context_get_manager (self->context), - gcal_calendar_get_source (calendar), - &parent_name, - NULL); icon = g_object_get_data (G_OBJECT (grid), "icon"); gtk_image_set_from_paintable (GTK_IMAGE (icon), color_paintable); @@ -318,6 +314,12 @@ on_combo_row_signal_factory_bind_cb (GtkSignalListItemFactory *factory, label = g_object_get_data (G_OBJECT (grid), "title"); gtk_label_set_label (GTK_LABEL (label), gcal_calendar_get_name (calendar)); + /* Get a colored version of the calendar source's name, to use as a subtitle */ + get_source_parent_name_color (gcal_context_get_manager (self->context), + gcal_calendar_get_source (calendar), + &parent_name, + NULL); + label = g_object_get_data (G_OBJECT (grid), "subtitle"); gtk_label_set_label (GTK_LABEL (label), parent_name); -- GitLab From 7566bf273b31bae4683360f4e2d15507c4b389c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Fortin=20Tam?= Date: Thu, 29 Feb 2024 16:16:55 -0500 Subject: [PATCH 2/3] import-dialog: Show indicator icons for invisible calendars When importing .ics files as events, you can assign the resulting events to any writable calendar, even those hidden from the view. However, it is good to have a hint of such calendars being invisible. That way, users can have predictable expectations. Fixes: https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/1184 --- src/gui/importer/gcal-import-dialog.c | 34 ++++++++++++++++++++------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/src/gui/importer/gcal-import-dialog.c b/src/gui/importer/gcal-import-dialog.c index 029fd2a5e..b40f02c1e 100644 --- a/src/gui/importer/gcal-import-dialog.c +++ b/src/gui/importer/gcal-import-dialog.c @@ -264,16 +264,17 @@ on_combo_row_signal_factory_setup_cb (GtkSignalListItemFactory *factory, GcalImportDialog *self) { GtkWidget *label; - GtkWidget *icon; + GtkWidget *color_icon; + GtkWidget *visibility_status_icon; GtkWidget *grid; grid = gtk_grid_new (); gtk_grid_set_column_spacing (GTK_GRID (grid), 6); - icon = gtk_image_new (); - gtk_widget_add_css_class (icon, "calendar-color-image"); - g_object_set_data (G_OBJECT (grid), "icon", icon); - gtk_grid_attach (GTK_GRID (grid), icon, 0, 0, 1, 2); + color_icon = gtk_image_new (); + gtk_widget_add_css_class (color_icon, "calendar-color-image"); + g_object_set_data (G_OBJECT (grid), "color_icon", color_icon); + gtk_grid_attach (GTK_GRID (grid), color_icon, 0, 0, 1, 2); label = gtk_label_new (NULL); gtk_label_set_xalign (GTK_LABEL (label), 0.0); @@ -287,6 +288,13 @@ on_combo_row_signal_factory_setup_cb (GtkSignalListItemFactory *factory, g_object_set_data (G_OBJECT (grid), "subtitle", label); gtk_grid_attach (GTK_GRID (grid), label, 1, 1, 1, 1); + visibility_status_icon = gtk_image_new (); + + g_object_set_data (G_OBJECT (grid), "visibility_status_icon", visibility_status_icon); + gtk_widget_set_hexpand (visibility_status_icon, TRUE); + gtk_widget_set_halign (visibility_status_icon, GTK_ALIGN_END); + gtk_grid_attach (GTK_GRID (grid), visibility_status_icon, 2, 0, 1, 2); + gtk_list_item_set_child (item, grid); } @@ -299,17 +307,27 @@ on_combo_row_signal_factory_bind_cb (GtkSignalListItemFactory *factory, g_autofree gchar *parent_name = NULL; GcalCalendar *calendar; GtkWidget *label; - GtkWidget *icon; + GtkWidget *color_icon_widget; GtkWidget *grid; calendar = gtk_list_item_get_item (item); grid = gtk_list_item_get_child (item); + color_icon_widget = g_object_get_data (G_OBJECT (grid), "color_icon"); color_paintable = get_circle_paintable_from_color (gcal_calendar_get_color (calendar), 16); + gtk_image_set_from_paintable (GTK_IMAGE (color_icon_widget), color_paintable); - icon = g_object_get_data (G_OBJECT (grid), "icon"); - gtk_image_set_from_paintable (GTK_IMAGE (icon), color_paintable); + /* Show indicator icons for calendars that are not shown in the views */ + if (!gcal_calendar_get_visible (calendar)) + { + g_autoptr (GIcon) visibility_icon = NULL; + GtkWidget *visibility_status_icon_widget; + + visibility_icon = g_themed_icon_new ("eye-not-looking-symbolic"); + visibility_status_icon_widget = g_object_get_data (G_OBJECT (grid), "visibility_status_icon"); + gtk_image_set_from_gicon (GTK_IMAGE (visibility_status_icon_widget), visibility_icon); + } label = g_object_get_data (G_OBJECT (grid), "title"); gtk_label_set_label (GTK_LABEL (label), gcal_calendar_get_name (calendar)); -- GitLab From f7aadd23bb987eb0f45167cb01dedfead3e23dc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Fortin=20Tam?= Date: Thu, 1 Aug 2024 20:26:08 -0400 Subject: [PATCH 3/3] import-dialog: Add a11y description on "hidden" calendar status icons --- src/gui/importer/gcal-import-dialog.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/gui/importer/gcal-import-dialog.c b/src/gui/importer/gcal-import-dialog.c index b40f02c1e..dcd826756 100644 --- a/src/gui/importer/gcal-import-dialog.c +++ b/src/gui/importer/gcal-import-dialog.c @@ -321,12 +321,17 @@ on_combo_row_signal_factory_bind_cb (GtkSignalListItemFactory *factory, /* Show indicator icons for calendars that are not shown in the views */ if (!gcal_calendar_get_visible (calendar)) { + g_autofree gchar *accessible_description = NULL; g_autoptr (GIcon) visibility_icon = NULL; GtkWidget *visibility_status_icon_widget; visibility_icon = g_themed_icon_new ("eye-not-looking-symbolic"); visibility_status_icon_widget = g_object_get_data (G_OBJECT (grid), "visibility_status_icon"); gtk_image_set_from_gicon (GTK_IMAGE (visibility_status_icon_widget), visibility_icon); + + accessible_description = g_strdup (_("This calendar is hidden")); + gtk_accessible_update_property (GTK_ACCESSIBLE (visibility_status_icon_widget), + GTK_ACCESSIBLE_PROPERTY_DESCRIPTION, accessible_description, -1); } label = g_object_get_data (G_OBJECT (grid), "title"); -- GitLab