summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGeorges Basile Stavracas Neto <georges.stavracas@gmail.com>2023-03-08 09:56:23 -0300
committerGeorges Basile Stavracas Neto <georges.stavracas@gmail.com>2023-03-16 12:25:15 +0000
commitb93aa0dd23968036e68aa30961f4160354aa35b1 (patch)
tree99fbdbf36318af8f10b832a7f370efda6cb6631d /src
parent98dff07ee7fe2fc7e43626b3477e63584a6f8317 (diff)
downloadgnome-calendar-b93aa0dd23968036e68aa30961f4160354aa35b1.tar.gz
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
Diffstat (limited to 'src')
-rw-r--r--src/gui/gcal-calendar-button.c10
-rw-r--r--src/gui/gcal-calendar-button.ui1
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 @@
<property name="name">spinner</property>
<property name="child">
<object class="GtkSpinner" id="refreshing_spinner">
- <property name="spinning">True</property>
<property name="tooltip_text" translatable="yes" context="tooltip">Synchronizing remote calendars…</property>
</object>
</property>