diff --git a/src/gcal-event.c b/src/gcal-event.c index dc619245..d9c7fe7d 100644 --- a/src/gcal-event.c +++ b/src/gcal-event.c @@ -221,11 +221,11 @@ get_timezone_from_ical (ECalComponentDateTime *comp) } static ECalComponentDateTime* -build_component_from_datetime (GcalEvent *self, - icaltimezone *current_tz, - GDateTime *dt) +build_component_from_datetime (GcalEvent *self, + GDateTime *dt) { ECalComponentDateTime *comp_dt; + gchar *tzid; if (!dt) return NULL; @@ -234,12 +234,15 @@ build_component_from_datetime (GcalEvent *self, comp_dt->value = NULL; comp_dt->tzid = NULL; + tzid = g_date_time_format (dt, "%Z"); + comp_dt->value = datetime_to_icaltime (dt); - comp_dt->value->zone = self->all_day ? icaltimezone_get_utc_timezone () : current_tz; + comp_dt->value->zone = icaltimezone_get_builtin_timezone_from_tzid (tzid); comp_dt->value->is_date = self->all_day; - /* All day events have UTC timezone */ - comp_dt->tzid = g_strdup (self->all_day ? "UTC" : icaltimezone_get_tzid (current_tz)); + /* All day events have no timezone */ + if (!self->all_day) + comp_dt->tzid = tzid; return comp_dt; } @@ -987,25 +990,19 @@ gcal_event_set_date_end (GcalEvent *self, if (self->dt_end != dt) { - ECalComponentDateTime *component_dt, current; + ECalComponentDateTime *component_dt; g_clear_pointer (&self->dt_end, g_date_time_unref); self->dt_end = g_date_time_ref (dt); - /* Retrieve the current timezone */ - e_cal_component_get_dtstart (self->component, ¤t); - /* Setup the ECalComponent's datetime value */ - component_dt = build_component_from_datetime (self, - icaltimezone_get_builtin_timezone_from_tzid (current.tzid), - dt); + component_dt = build_component_from_datetime (self, dt); e_cal_component_set_dtend (self->component, component_dt); e_cal_component_commit_sequence (self->component); g_object_notify (G_OBJECT (self), "date-end"); - e_cal_component_free_datetime (¤t); e_cal_component_free_datetime (component_dt); g_free (component_dt); } @@ -1042,25 +1039,19 @@ gcal_event_set_date_start (GcalEvent *self, if (self->dt_start != dt) { - ECalComponentDateTime *component_dt, current; + ECalComponentDateTime *component_dt; g_clear_pointer (&self->dt_start, g_date_time_unref); self->dt_start = g_date_time_ref (dt); - /* Retrieve the current timezone */ - e_cal_component_get_dtstart (self->component, ¤t); - /* Setup the ECalComponent's datetime value */ - component_dt = build_component_from_datetime (self, - icaltimezone_get_builtin_timezone_from_tzid (current.tzid), - dt); + component_dt = build_component_from_datetime (self, dt); e_cal_component_set_dtstart (self->component, component_dt); e_cal_component_commit_sequence (self->component); g_object_notify (G_OBJECT (self), "date-start"); - e_cal_component_free_datetime (¤t); e_cal_component_free_datetime (component_dt); g_free (component_dt); }