diff --git a/src/core/gcal-manager.c b/src/core/gcal-manager.c index f986b20d..6da447f5 100644 --- a/src/core/gcal-manager.c +++ b/src/core/gcal-manager.c @@ -335,12 +335,8 @@ on_event_created (GObject *source_object, } else { - GcalCalendar *calendar; - g_object_ref (data->event); - - calendar = gcal_event_get_calendar (data->event); - gcal_manager_set_default_source (data->manager, gcal_calendar_get_source (calendar)); + gcal_manager_set_default_calendar (data->manager, gcal_event_get_calendar (data->event)); g_debug ("Event: %s created successfully", new_uid); } @@ -636,19 +632,7 @@ gcal_manager_set_property (GObject *object, switch (property_id) { case PROP_DEFAULT_CALENDAR: - { - ESource *source; - - source = e_source_registry_ref_default_calendar (self->source_registry); - g_object_unref (source); - - /* Only notify a change when they're different, otherwise we'll end up in a notify loop */ - if (g_value_get_object (value) == source) - break; - - e_source_registry_set_default_calendar (self->source_registry, g_value_get_object (value)); - g_object_notify (object, "default-calendar"); - } + gcal_manager_set_default_calendar (self, g_value_get_object (value)); break; default: @@ -671,7 +655,7 @@ gcal_manager_get_property (GObject *object, switch (property_id) { case PROP_DEFAULT_CALENDAR: - g_value_take_object (value, e_source_registry_ref_default_calendar (self->source_registry)); + g_value_set_object (value, gcal_manager_get_default_calendar (self)); break; default: @@ -700,8 +684,8 @@ gcal_manager_class_init (GcalManagerClass *klass) properties[PROP_DEFAULT_CALENDAR] = g_param_spec_object ("default-calendar", "Default calendar", "The default calendar", - E_TYPE_SOURCE, - G_PARAM_READWRITE); + GCAL_TYPE_CALENDAR, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_properties (object_class, NUM_PROPS, properties); @@ -796,34 +780,41 @@ gcal_manager_get_calendar_from_source (GcalManager *self, } /** - * gcal_manager_get_default_source: + * gcal_manager_get_default_calendar: * @self: a #GcalManager * - * Returns: (transfer full): an #ESource object. Free - * with g_object_unref(). + * Returns: (transfer none): a #GcalCalendar. */ -ESource* -gcal_manager_get_default_source (GcalManager *self) +GcalCalendar* +gcal_manager_get_default_calendar (GcalManager *self) { + g_autoptr (ESource) default_source = NULL; + g_return_val_if_fail (GCAL_IS_MANAGER (self), NULL); - return e_source_registry_ref_default_calendar (self->source_registry); + default_source = e_source_registry_ref_default_calendar (self->source_registry); + return g_hash_table_lookup (self->clients, default_source); } /** - * gcal_manager_set_default_source: + * gcal_manager_set_default_calendar: * @self: a #GcalManager - * @source: the new default source. + * @calendar: the new default calendar. * * Sets the default calendar. */ void -gcal_manager_set_default_source (GcalManager *self, - ESource *source) +gcal_manager_set_default_calendar (GcalManager *self, + GcalCalendar *calendar) { g_return_if_fail (GCAL_IS_MANAGER (self)); - e_source_registry_set_default_calendar (self->source_registry, source); + if (calendar == gcal_manager_get_default_calendar (self)) + return; + + e_source_registry_set_default_calendar (self->source_registry, + gcal_calendar_get_source (calendar)); + g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_DEFAULT_CALENDAR]); } /** diff --git a/src/core/gcal-manager.h b/src/core/gcal-manager.h index 3556009e..9c3036b2 100644 --- a/src/core/gcal-manager.h +++ b/src/core/gcal-manager.h @@ -40,10 +40,10 @@ GcalCalendar* gcal_manager_get_calendar_from_source (GcalManager GList* gcal_manager_get_calendars (GcalManager *self); -ESource* gcal_manager_get_default_source (GcalManager *self); +GcalCalendar* gcal_manager_get_default_calendar (GcalManager *self); -void gcal_manager_set_default_source (GcalManager *self, - ESource *source); +void gcal_manager_set_default_calendar (GcalManager *self, + GcalCalendar *calendar); void gcal_manager_set_subscriber (GcalManager *self, ECalDataModelSubscriber *subscriber, diff --git a/src/gcal-quick-add-popover.c b/src/gcal-quick-add-popover.c index 43ea74f4..a1d7a4cf 100644 --- a/src/gcal-quick-add-popover.c +++ b/src/gcal-quick-add-popover.c @@ -490,16 +490,12 @@ update_default_calendar_row (GcalQuickAddPopover *self) GcalCalendar *default_calendar; GcalManager *manager; GtkWidget *row; - ESource *default_source; manager = gcal_context_get_manager (self->context); - default_source = gcal_manager_get_default_source (manager); - default_calendar = gcal_manager_get_calendar_from_source (manager, default_source); + default_calendar = gcal_manager_get_default_calendar (manager); row = get_row_for_calendar (self, default_calendar); select_row (self, GTK_LIST_BOX_ROW (row)); - - g_clear_object (&default_source); } @@ -512,26 +508,21 @@ on_calendar_added (GcalManager *manager, GcalCalendar *calendar, GcalQuickAddPopover *self) { - ESource *default_source; + GcalCalendar *default_calendar; GtkWidget *row; /* Since we can't add on read-only calendars, lets not show them at all */ if (gcal_calendar_is_read_only (calendar)) return; - default_source = gcal_manager_get_default_source (manager); + default_calendar = gcal_manager_get_default_calendar (manager); row = create_calendar_row (manager, calendar); gtk_container_add (GTK_CONTAINER (self->calendars_listbox), row); /* Select the default source whe first adding events */ - if (gcal_calendar_get_source (calendar) == default_source && - !self->selected_row) - { - select_row (self, GTK_LIST_BOX_ROW (row)); - } - - g_clear_object (&default_source); + if (calendar == default_calendar && !self->selected_row) + select_row (self, GTK_LIST_BOX_ROW (row)); } static void diff --git a/src/gcal-source-dialog.c b/src/gcal-source-dialog.c index 4fd10706..a4000728 100644 --- a/src/gcal-source-dialog.c +++ b/src/gcal-source-dialog.c @@ -558,14 +558,15 @@ default_check_toggled (GObject *object, { GcalSourceDialog *self = GCAL_SOURCE_DIALOG (user_data); GcalManager *manager; + ESource *new_default_source; manager = gcal_context_get_manager (self->context); /* Retrieve the current default source */ if (self->old_default_source == NULL) { - self->old_default_source = gcal_manager_get_default_source (manager); - g_object_unref (self->old_default_source); + GcalCalendar *default_calendar = gcal_manager_get_default_calendar (manager); + self->old_default_source = gcal_calendar_get_source (default_calendar); } /** @@ -574,9 +575,12 @@ default_check_toggled (GObject *object, * default source. */ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (object))) - gcal_manager_set_default_source (manager, self->source); + new_default_source = self->source; else - gcal_manager_set_default_source (manager, self->old_default_source); + new_default_source = self->old_default_source; + + gcal_manager_set_default_calendar (manager, + gcal_manager_get_calendar_from_source (manager, new_default_source)); } static gboolean @@ -865,11 +869,13 @@ stack_visible_child_name_changed (GObject *object, */ if (visible_child == self->edit_grid && self->source != NULL) { + GcalCalendar *default_calendar; ESource *default_source; gchar *parent_name; gboolean creation_mode, is_goa, is_file, is_remote; - default_source = gcal_manager_get_default_source (manager); + default_calendar = gcal_manager_get_default_calendar (manager); + default_source = gcal_calendar_get_source (default_calendar); creation_mode = (self->mode == GCAL_SOURCE_DIALOG_MODE_CREATE || self->mode == GCAL_SOURCE_DIALOG_MODE_CREATE_WEB); is_goa = is_goa_source (GCAL_SOURCE_DIALOG (user_data), self->source); diff --git a/src/gcal-window.c b/src/gcal-window.c index 45687b41..06b22dcb 100644 --- a/src/gcal-window.c +++ b/src/gcal-window.c @@ -672,7 +672,6 @@ create_event_detailed_cb (GcalView *view, gpointer end_span, gpointer user_data) { - g_autoptr (ESource) default_source = NULL; GcalWindow *window = GCAL_WINDOW (user_data); GcalCalendar *default_calendar; GcalManager *manager; @@ -681,8 +680,7 @@ create_event_detailed_cb (GcalView *view, manager = gcal_context_get_manager (window->context); comp = build_component_from_details ("", start_span, end_span); - default_source = gcal_manager_get_default_source (manager); - default_calendar = gcal_manager_get_calendar_from_source (manager, default_source); + default_calendar = gcal_manager_get_default_calendar (manager); event = gcal_event_new (default_calendar, comp, NULL); gcal_edit_dialog_set_event_is_new (GCAL_EDIT_DIALOG (window->edit_dialog), TRUE);