diff --git a/src/gcal-edit-dialog.c b/src/gcal-edit-dialog.c index c1a4a671..e46cf977 100644 --- a/src/gcal-edit-dialog.c +++ b/src/gcal-edit-dialog.c @@ -290,7 +290,18 @@ update_date (GtkEntry *entry, e_cal_component_get_dtend (priv->component, &dtend); *(dtstart.value) = *start_date; + if (dtstart.tzid != NULL) + { + icaltimezone* zone = icaltimezone_get_builtin_timezone_from_tzid (dtstart.tzid); + *(dtstart.value) = icaltime_convert_to_zone (*start_date, zone); + } + *(dtend.value) = *end_date; + if (dtend.tzid != NULL) + { + icaltimezone* zone = icaltimezone_get_builtin_timezone_from_tzid (dtend.tzid); + *(dtend.value) = icaltime_convert_to_zone (*end_date, zone); + } e_cal_component_set_dtstart (priv->component, &dtstart); e_cal_component_set_dtend (priv->component, &dtend); @@ -436,7 +447,18 @@ update_time (GtkEntry *entry, e_cal_component_get_dtend (priv->component, &dtend); *(dtstart.value) = *start_date; + if (dtstart.tzid != NULL) + { + icaltimezone* zone = icaltimezone_get_builtin_timezone_from_tzid (dtstart.tzid); + *(dtstart.value) = icaltime_convert_to_zone (*start_date, zone); + } + *(dtend.value) = *end_date; + if (dtend.tzid != NULL) + { + icaltimezone* zone = icaltimezone_get_builtin_timezone_from_tzid (dtend.tzid); + *(dtend.value) = icaltime_convert_to_zone (*end_date, zone); + } e_cal_component_set_dtstart (priv->component, &dtstart); e_cal_component_set_dtend (priv->component, &dtend); @@ -847,8 +869,15 @@ gcal_edit_dialog_set_event_data (GcalEditDialog *dialog, if (!all_day) { icaltimetype *date = gcal_dup_icaltime (dtstart.value); - *date = icaltime_convert_to_zone (*(dtstart.value), e_cal_util_get_system_timezone ()); - gcal_time_selector_set_time (GCAL_TIME_SELECTOR (priv->start_time_selector), date->hour, date->minute); + if (dtstart.tzid != NULL) + { + dtstart.value->zone = + icaltimezone_get_builtin_timezone_from_tzid (dtstart.tzid); + } + *date = icaltime_convert_to_zone (*(dtstart.value), + e_cal_util_get_system_timezone ()); + gcal_time_selector_set_time (GCAL_TIME_SELECTOR (priv->start_time_selector), + date->hour, date->minute); g_free (date); } @@ -861,8 +890,15 @@ gcal_edit_dialog_set_event_data (GcalEditDialog *dialog, if (!all_day) { icaltimetype *date = gcal_dup_icaltime (dtend.value); - *date = icaltime_convert_to_zone (*(dtstart.value), e_cal_util_get_system_timezone ()); - gcal_time_selector_set_time (GCAL_TIME_SELECTOR (priv->end_time_selector), date->hour, date->minute); + if (dtend.tzid != NULL) + { + dtend.value->zone = + icaltimezone_get_builtin_timezone_from_tzid (dtend.tzid); + } + *date = icaltime_convert_to_zone (*(dtend.value), + e_cal_util_get_system_timezone ()); + gcal_time_selector_set_time (GCAL_TIME_SELECTOR (priv->end_time_selector), + date->hour, date->minute); g_free (date); } }