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
This commit is contained in:
Jean-François Fortin Tam
2024-08-27 15:04:03 -04:00
parent f76659c706
commit 7566bf273b
+26 -8
View File
@@ -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));