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
This commit is contained in:
Georges Basile Stavracas Neto
2023-03-16 12:25:15 +00:00
parent 98dff07ee7
commit b93aa0dd23
2 changed files with 6 additions and 5 deletions
+6 -4
View File
@@ -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);
}
-1
View File
@@ -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>