manager: Handle default calendars via GcalCalendar

This commit is contained in:
Georges Basile Stavracas Neto
2019-05-04 12:05:39 -03:00
parent 7811b90730
commit bb8d5b92ce
5 changed files with 43 additions and 57 deletions
+23 -32
View File
@@ -335,12 +335,8 @@ on_event_created (GObject *source_object,
} }
else else
{ {
GcalCalendar *calendar;
g_object_ref (data->event); g_object_ref (data->event);
gcal_manager_set_default_calendar (data->manager, gcal_event_get_calendar (data->event));
calendar = gcal_event_get_calendar (data->event);
gcal_manager_set_default_source (data->manager, gcal_calendar_get_source (calendar));
g_debug ("Event: %s created successfully", new_uid); g_debug ("Event: %s created successfully", new_uid);
} }
@@ -636,19 +632,7 @@ gcal_manager_set_property (GObject *object,
switch (property_id) switch (property_id)
{ {
case PROP_DEFAULT_CALENDAR: case PROP_DEFAULT_CALENDAR:
{ gcal_manager_set_default_calendar (self, g_value_get_object (value));
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");
}
break; break;
default: default:
@@ -671,7 +655,7 @@ gcal_manager_get_property (GObject *object,
switch (property_id) switch (property_id)
{ {
case PROP_DEFAULT_CALENDAR: 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; break;
default: default:
@@ -700,8 +684,8 @@ gcal_manager_class_init (GcalManagerClass *klass)
properties[PROP_DEFAULT_CALENDAR] = g_param_spec_object ("default-calendar", properties[PROP_DEFAULT_CALENDAR] = g_param_spec_object ("default-calendar",
"Default calendar", "Default calendar",
"The default calendar", "The default calendar",
E_TYPE_SOURCE, GCAL_TYPE_CALENDAR,
G_PARAM_READWRITE); G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
g_object_class_install_properties (object_class, NUM_PROPS, properties); 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 * @self: a #GcalManager
* *
* Returns: (transfer full): an #ESource object. Free * Returns: (transfer none): a #GcalCalendar.
* with g_object_unref().
*/ */
ESource* GcalCalendar*
gcal_manager_get_default_source (GcalManager *self) gcal_manager_get_default_calendar (GcalManager *self)
{ {
g_autoptr (ESource) default_source = NULL;
g_return_val_if_fail (GCAL_IS_MANAGER (self), 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 * @self: a #GcalManager
* @source: the new default source. * @calendar: the new default calendar.
* *
* Sets the default calendar. * Sets the default calendar.
*/ */
void void
gcal_manager_set_default_source (GcalManager *self, gcal_manager_set_default_calendar (GcalManager *self,
ESource *source) GcalCalendar *calendar)
{ {
g_return_if_fail (GCAL_IS_MANAGER (self)); 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]);
} }
/** /**
+3 -3
View File
@@ -40,10 +40,10 @@ GcalCalendar* gcal_manager_get_calendar_from_source (GcalManager
GList* gcal_manager_get_calendars (GcalManager *self); 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, void gcal_manager_set_default_calendar (GcalManager *self,
ESource *source); GcalCalendar *calendar);
void gcal_manager_set_subscriber (GcalManager *self, void gcal_manager_set_subscriber (GcalManager *self,
ECalDataModelSubscriber *subscriber, ECalDataModelSubscriber *subscriber,
+5 -14
View File
@@ -490,16 +490,12 @@ update_default_calendar_row (GcalQuickAddPopover *self)
GcalCalendar *default_calendar; GcalCalendar *default_calendar;
GcalManager *manager; GcalManager *manager;
GtkWidget *row; GtkWidget *row;
ESource *default_source;
manager = gcal_context_get_manager (self->context); manager = gcal_context_get_manager (self->context);
default_source = gcal_manager_get_default_source (manager); default_calendar = gcal_manager_get_default_calendar (manager);
default_calendar = gcal_manager_get_calendar_from_source (manager, default_source);
row = get_row_for_calendar (self, default_calendar); row = get_row_for_calendar (self, default_calendar);
select_row (self, GTK_LIST_BOX_ROW (row)); select_row (self, GTK_LIST_BOX_ROW (row));
g_clear_object (&default_source);
} }
@@ -512,26 +508,21 @@ on_calendar_added (GcalManager *manager,
GcalCalendar *calendar, GcalCalendar *calendar,
GcalQuickAddPopover *self) GcalQuickAddPopover *self)
{ {
ESource *default_source; GcalCalendar *default_calendar;
GtkWidget *row; GtkWidget *row;
/* Since we can't add on read-only calendars, lets not show them at all */ /* Since we can't add on read-only calendars, lets not show them at all */
if (gcal_calendar_is_read_only (calendar)) if (gcal_calendar_is_read_only (calendar))
return; return;
default_source = gcal_manager_get_default_source (manager); default_calendar = gcal_manager_get_default_calendar (manager);
row = create_calendar_row (manager, calendar); row = create_calendar_row (manager, calendar);
gtk_container_add (GTK_CONTAINER (self->calendars_listbox), row); gtk_container_add (GTK_CONTAINER (self->calendars_listbox), row);
/* Select the default source whe first adding events */ /* Select the default source whe first adding events */
if (gcal_calendar_get_source (calendar) == default_source && if (calendar == default_calendar && !self->selected_row)
!self->selected_row) select_row (self, GTK_LIST_BOX_ROW (row));
{
select_row (self, GTK_LIST_BOX_ROW (row));
}
g_clear_object (&default_source);
} }
static void static void
+11 -5
View File
@@ -558,14 +558,15 @@ default_check_toggled (GObject *object,
{ {
GcalSourceDialog *self = GCAL_SOURCE_DIALOG (user_data); GcalSourceDialog *self = GCAL_SOURCE_DIALOG (user_data);
GcalManager *manager; GcalManager *manager;
ESource *new_default_source;
manager = gcal_context_get_manager (self->context); manager = gcal_context_get_manager (self->context);
/* Retrieve the current default source */ /* Retrieve the current default source */
if (self->old_default_source == NULL) if (self->old_default_source == NULL)
{ {
self->old_default_source = gcal_manager_get_default_source (manager); GcalCalendar *default_calendar = gcal_manager_get_default_calendar (manager);
g_object_unref (self->old_default_source); self->old_default_source = gcal_calendar_get_source (default_calendar);
} }
/** /**
@@ -574,9 +575,12 @@ default_check_toggled (GObject *object,
* default source. * default source.
*/ */
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (object))) if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (object)))
gcal_manager_set_default_source (manager, self->source); new_default_source = self->source;
else 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 static gboolean
@@ -865,11 +869,13 @@ stack_visible_child_name_changed (GObject *object,
*/ */
if (visible_child == self->edit_grid && self->source != NULL) if (visible_child == self->edit_grid && self->source != NULL)
{ {
GcalCalendar *default_calendar;
ESource *default_source; ESource *default_source;
gchar *parent_name; gchar *parent_name;
gboolean creation_mode, is_goa, is_file, is_remote; 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 || creation_mode = (self->mode == GCAL_SOURCE_DIALOG_MODE_CREATE ||
self->mode == GCAL_SOURCE_DIALOG_MODE_CREATE_WEB); self->mode == GCAL_SOURCE_DIALOG_MODE_CREATE_WEB);
is_goa = is_goa_source (GCAL_SOURCE_DIALOG (user_data), self->source); is_goa = is_goa_source (GCAL_SOURCE_DIALOG (user_data), self->source);
+1 -3
View File
@@ -672,7 +672,6 @@ create_event_detailed_cb (GcalView *view,
gpointer end_span, gpointer end_span,
gpointer user_data) gpointer user_data)
{ {
g_autoptr (ESource) default_source = NULL;
GcalWindow *window = GCAL_WINDOW (user_data); GcalWindow *window = GCAL_WINDOW (user_data);
GcalCalendar *default_calendar; GcalCalendar *default_calendar;
GcalManager *manager; GcalManager *manager;
@@ -681,8 +680,7 @@ create_event_detailed_cb (GcalView *view,
manager = gcal_context_get_manager (window->context); manager = gcal_context_get_manager (window->context);
comp = build_component_from_details ("", start_span, end_span); comp = build_component_from_details ("", start_span, end_span);
default_source = gcal_manager_get_default_source (manager); default_calendar = gcal_manager_get_default_calendar (manager);
default_calendar = gcal_manager_get_calendar_from_source (manager, default_source);
event = gcal_event_new (default_calendar, comp, NULL); event = gcal_event_new (default_calendar, comp, NULL);
gcal_edit_dialog_set_event_is_new (GCAL_EDIT_DIALOG (window->edit_dialog), TRUE); gcal_edit_dialog_set_event_is_new (GCAL_EDIT_DIALOG (window->edit_dialog), TRUE);