diff --git a/src/gui/gcal-quick-add-popover.c b/src/gui/gcal-quick-add-popover.c index a1d7a4cf96d42e97b6c3d417d1b659577767a256..4f8e93e5639a303da32c956198c31b9ff177402f 100644 --- a/src/gui/gcal-quick-add-popover.c +++ b/src/gui/gcal-quick-add-popover.c @@ -782,12 +782,20 @@ gcal_quick_add_popover_set_property (GObject *object, break; case PROP_CONTEXT: - if (g_set_object (&self->context, g_value_get_object (value))) + if (self->context != g_value_get_object (value)) { g_autoptr (GList) calendars = NULL; GcalManager *manager; GList *l; + if (self->context != NULL) + { + manager = gcal_context_get_manager (self->context); + g_signal_handlers_disconnect_by_data (manager, self); + } + + g_set_object (&self->context, g_value_get_object (value)); + /* Add currently loaded sources */ manager = gcal_context_get_manager (self->context); calendars = gcal_manager_get_calendars (manager); @@ -798,10 +806,10 @@ gcal_quick_add_popover_set_property (GObject *object, g_list_free (calendars); /* Connect to the manager signals and keep the list updates */ - g_signal_connect (manager, "calendar-added", G_CALLBACK (on_calendar_added), self); - g_signal_connect (manager, "calendar-changed", G_CALLBACK (on_calendar_changed), self); - g_signal_connect (manager, "calendar-removed", G_CALLBACK (on_calendar_removed), self); - g_signal_connect_swapped (manager, "notify::default-calendar", G_CALLBACK (update_default_calendar_row), self); + g_signal_connect_object (manager, "calendar-added", G_CALLBACK (on_calendar_added), self, 0); + g_signal_connect_object (manager, "calendar-changed", G_CALLBACK (on_calendar_changed), self, 0); + g_signal_connect_object (manager, "calendar-removed", G_CALLBACK (on_calendar_removed), self, 0); + g_signal_connect_object (manager, "notify::default-calendar", G_CALLBACK (update_default_calendar_row), self, G_CONNECT_SWAPPED); g_signal_connect_object (self->context, "notify::time-format",