manager: Handle default calendars via GcalCalendar
This commit is contained in:
+23
-32
@@ -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]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user