[gnome-calendar] edit-dialog: edit datetimes in the system timezone
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-calendar] edit-dialog: edit datetimes in the system timezone
- Date: Thu, 18 Feb 2016 03:31:47 +0000 (UTC)
commit 6775ffd7b30c055ea185f5472b0ebb1c3e86c7d0
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date: Thu Feb 18 01:28:42 2016 -0200
edit-dialog: edit datetimes in the system timezone
The dates are adjusted to the system timezone when an
event is set, and we adjust it back to the event's zone
when we save and close the dialog.
src/gcal-edit-dialog.c | 51 ++++++++++++++++++++++++++++-------------------
1 files changed, 30 insertions(+), 21 deletions(-)
---
diff --git a/src/gcal-edit-dialog.c b/src/gcal-edit-dialog.c
index deb0988..ee5bc86 100644
--- a/src/gcal-edit-dialog.c
+++ b/src/gcal-edit-dialog.c
@@ -478,8 +478,8 @@ gcal_edit_dialog_action_button_clicked (GtkWidget *widget,
}
else
{
- GDateTime *start_date;
- GDateTime *end_date;
+ GDateTime *start_date, *adjusted_start;
+ GDateTime *end_date, *adjusted_end;
gboolean all_day;
gchar *note_text;
@@ -509,13 +509,21 @@ gcal_edit_dialog_action_button_clicked (GtkWidget *widget,
g_clear_pointer (&utc, g_time_zone_unref);
}
- /* Update start & end dates */
+ /*
+ * Update start & end dates. We always translate the dates to the event's
+ * timezone before applying them.
+ */
start_date = gcal_edit_dialog_get_date_start (dialog);
+ adjusted_start = g_date_time_to_timezone (start_date, gcal_event_get_timezone (dialog->event));
+
end_date = gcal_edit_dialog_get_date_end (dialog);
+ adjusted_end = g_date_time_to_timezone (end_date, gcal_event_get_timezone (dialog->event));
- gcal_event_set_date_start (dialog->event, start_date);
- gcal_event_set_date_end (dialog->event, end_date);
+ gcal_event_set_date_start (dialog->event, adjusted_start);
+ gcal_event_set_date_end (dialog->event, adjusted_end);
+ g_clear_pointer (&adjusted_start, g_date_time_unref);
+ g_clear_pointer (&adjusted_end, g_date_time_unref);
g_clear_pointer (&start_date, g_date_time_unref);
g_clear_pointer (&end_date, g_date_time_unref);
@@ -628,8 +636,8 @@ gcal_edit_dialog_set_event (GcalEditDialog *dialog,
e_source_get_display_name (source));
/* retrieve start and end dates */
- date_start = gcal_event_get_date_start (event);
- date_end = gcal_event_get_date_end (event);
+ date_start = g_date_time_to_local (gcal_event_get_date_start (event));
+ date_end = g_date_time_to_local (gcal_event_get_date_end (event));
/* date */
gcal_date_selector_set_date (GCAL_DATE_SELECTOR (dialog->start_date_selector), date_start);
@@ -656,6 +664,9 @@ gcal_edit_dialog_set_event (GcalEditDialog *dialog,
gcal_edit_dialog_set_writable (dialog, gcal_manager_is_client_writable (dialog->manager, source));
+ g_clear_pointer (&date_start, g_date_time_unref);
+ g_clear_pointer (&date_end, g_date_time_unref);
+
out:
g_object_notify (G_OBJECT (dialog), "event");
@@ -684,13 +695,12 @@ gcal_edit_dialog_get_date_start (GcalEditDialog *dialog)
date = gcal_date_selector_get_date (GCAL_DATE_SELECTOR (dialog->start_date_selector));
time = gcal_time_selector_get_time (GCAL_TIME_SELECTOR (dialog->start_time_selector));
- retval = g_date_time_new (gcal_event_get_timezone (dialog->event),
- g_date_time_get_year (date),
- g_date_time_get_month (date),
- g_date_time_get_day_of_month (date),
- g_date_time_get_hour (time),
- g_date_time_get_minute (time),
- 0);
+ retval = g_date_time_new_local (g_date_time_get_year (date),
+ g_date_time_get_month (date),
+ g_date_time_get_day_of_month (date),
+ g_date_time_get_hour (time),
+ g_date_time_get_minute (time),
+ 0);
return retval;
}
@@ -705,13 +715,12 @@ gcal_edit_dialog_get_date_end (GcalEditDialog *dialog)
date = gcal_date_selector_get_date (GCAL_DATE_SELECTOR (dialog->end_date_selector));
time = gcal_time_selector_get_time (GCAL_TIME_SELECTOR (dialog->end_time_selector));
- retval = g_date_time_new (gcal_event_get_timezone (dialog->event),
- g_date_time_get_year (date),
- g_date_time_get_month (date),
- g_date_time_get_day_of_month (date),
- g_date_time_get_hour (time),
- g_date_time_get_minute (time),
- 0);
+ retval = g_date_time_new_local (g_date_time_get_year (date),
+ g_date_time_get_month (date),
+ g_date_time_get_day_of_month (date),
+ g_date_time_get_hour (time),
+ g_date_time_get_minute (time),
+ 0);
return retval;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]