[gnome-calendar] edit-dialog: fix more timezone issues



commit 9df6a37fd9ba36c0ef71dcac45f1b279618cede6
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Thu Feb 18 10:27:53 2016 +0100

    edit-dialog: fix more timezone issues

 src/gcal-edit-dialog.c |   42 ++++++++++++++++++++++++++++++------------
 1 files changed, 30 insertions(+), 12 deletions(-)
---
diff --git a/src/gcal-edit-dialog.c b/src/gcal-edit-dialog.c
index 62a253a..08b6315 100644
--- a/src/gcal-edit-dialog.c
+++ b/src/gcal-edit-dialog.c
@@ -690,19 +690,28 @@ gcal_edit_dialog_set_manager (GcalEditDialog *dialog,
 GDateTime*
 gcal_edit_dialog_get_date_start (GcalEditDialog *dialog)
 {
+  GTimeZone *tz;
   GDateTime *date;
   GDateTime *time;
   GDateTime *retval;
+  gboolean all_day;
+
+  /* Use UTC timezone for All Day events, otherwise use the event's timezone */
+  all_day = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->all_day_check));
+  tz = all_day ? g_time_zone_new_utc () : g_time_zone_ref (gcal_event_get_timezone (dialog->event));
 
   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_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);
+  retval = g_date_time_new (tz,
+                            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);
+
+  g_clear_pointer (&tz, g_time_zone_unref);
 
   return retval;
 }
@@ -710,19 +719,28 @@ gcal_edit_dialog_get_date_start (GcalEditDialog *dialog)
 GDateTime*
 gcal_edit_dialog_get_date_end (GcalEditDialog *dialog)
 {
+  GTimeZone *tz;
   GDateTime *date;
   GDateTime *time;
   GDateTime *retval;
+  gboolean all_day;
+
+  /* Use UTC timezone for All Day events, otherwise use the event's timezone */
+  all_day = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->all_day_check));
+  tz = all_day ? g_time_zone_new_utc () : g_time_zone_ref (gcal_event_get_timezone (dialog->event));
 
   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_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);
+  retval = g_date_time_new (tz,
+                            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);
+
+  g_clear_pointer (&tz, g_time_zone_unref);
 
   return retval;
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]