[gnome-calendar] edit-dialog: edit datetimes in the system timezone



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]