From b93aa0dd23968036e68aa30961f4160354aa35b1 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Wed, 8 Mar 2023 09:56:23 -0300 Subject: [PATCH] calendar-button: Stop spinning when not synchronizing GtkSpinner queues relayouts even when the stack is not displaying it, and this causes excessive redrawing. This button design looks obsolete and should eventually be reworked, but for now, let's just stop spinning when the spinner is invisible. Closes https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/971 --- src/gui/gcal-calendar-button.c | 10 ++++++---- src/gui/gcal-calendar-button.ui | 1 - 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/gui/gcal-calendar-button.c b/src/gui/gcal-calendar-button.c index eae6bc40..3c2e3b71 100644 --- a/src/gui/gcal-calendar-button.c +++ b/src/gui/gcal-calendar-button.c @@ -31,6 +31,7 @@ struct _GcalCalendarButton GtkWidget *calendar_listbox; GtkStack *icon_stack; + GtkSpinner *refreshing_spinner; GcalContext *context; @@ -168,16 +169,16 @@ icon_change_timeout_cb (gpointer data) { GcalCalendarButton *self; GcalManager *manager; + gboolean synchronizing; self = GCAL_CALENDAR_BUTTON (data); manager = gcal_context_get_manager (self->context); + synchronizing = gcal_manager_get_synchronizing (manager); g_debug ("Updating calendar icon to spinner"); - if (gcal_manager_get_synchronizing (manager)) - gtk_stack_set_visible_child_name (self->icon_stack, "spinner"); - else - gtk_stack_set_visible_child_name (self->icon_stack, "icon"); + gtk_stack_set_visible_child_name (self->icon_stack, synchronizing ? "spinner" : "icon"); + gtk_spinner_set_spinning (self->refreshing_spinner, synchronizing); self->icon_changed_source_id = 0; return G_SOURCE_REMOVE; @@ -355,6 +356,7 @@ gcal_calendar_button_class_init (GcalCalendarButtonClass *klass) gtk_widget_class_bind_template_child (widget_class, GcalCalendarButton, calendar_listbox); gtk_widget_class_bind_template_child (widget_class, GcalCalendarButton, icon_stack); + gtk_widget_class_bind_template_child (widget_class, GcalCalendarButton, refreshing_spinner); gtk_widget_class_bind_template_callback (widget_class, on_listbox_row_activated_cb); } diff --git a/src/gui/gcal-calendar-button.ui b/src/gui/gcal-calendar-button.ui index fe1f1714..c77eb5a7 100644 --- a/src/gui/gcal-calendar-button.ui +++ b/src/gui/gcal-calendar-button.ui @@ -38,7 +38,6 @@ spinner - True Synchronizing remote calendars…