[gnome-calendar] quick-add-popover: fix event creation again



commit fd6d6e97c97f1f0e3e60321401d865addab849a2
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Thu Feb 18 03:56:55 2016 -0200

    quick-add-popover: fix event creation again

 src/gcal-edit-dialog.c       |   10 ++++++----
 src/gcal-event.c             |   25 ++++++++++++++-----------
 src/gcal-month-view.c        |   32 ++++++++++++++++++++++----------
 src/gcal-quick-add-popover.c |    2 ++
 4 files changed, 44 insertions(+), 25 deletions(-)
---
diff --git a/src/gcal-edit-dialog.c b/src/gcal-edit-dialog.c
index ee5bc86..62a253a 100644
--- a/src/gcal-edit-dialog.c
+++ b/src/gcal-edit-dialog.c
@@ -607,6 +607,7 @@ gcal_edit_dialog_set_event (GcalEditDialog *dialog,
       if (!event)
         goto out;
 
+      all_day = gcal_event_get_all_day (event);
       source = gcal_event_get_source (event);
 
       /* Clear event data */
@@ -636,8 +637,11 @@ gcal_edit_dialog_set_event (GcalEditDialog *dialog,
                                    e_source_get_display_name (source));
 
       /* retrieve start and end dates */
-      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_start = gcal_event_get_date_start (event);
+      date_start = all_day ? g_date_time_ref (date_start) : g_date_time_to_local (date_start);
+
+      date_end = gcal_event_get_date_end (event);
+      date_end = all_day ? g_date_time_ref (date_end) : g_date_time_to_local (date_end);
 
       /* date */
       gcal_date_selector_set_date (GCAL_DATE_SELECTOR (dialog->start_date_selector), date_start);
@@ -648,8 +652,6 @@ gcal_edit_dialog_set_event (GcalEditDialog *dialog,
       gcal_time_selector_set_time (GCAL_TIME_SELECTOR (dialog->end_time_selector), date_end);
 
       /* all_day  */
-      all_day = gcal_event_get_all_day (event);
-
       gtk_widget_set_sensitive (dialog->start_time_selector, dialog->writable && !all_day);
       gtk_widget_set_sensitive (dialog->end_time_selector, dialog->writable && !all_day);
       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->all_day_check), all_day);
diff --git a/src/gcal-event.c b/src/gcal-event.c
index cb562d6..2ccd946 100644
--- a/src/gcal-event.c
+++ b/src/gcal-event.c
@@ -1000,28 +1000,31 @@ gcal_event_set_timezone (GcalEvent *self,
 
   if (self->timezone != timezone)
     {
-      GDateTime *new_dtstart;
-
       g_clear_pointer (&self->timezone, g_time_zone_unref);
       self->timezone = g_time_zone_ref (timezone);
 
       /* Swap the timezone from the component start & end dates*/
-      new_dtstart = g_date_time_to_timezone (self->dt_start, timezone);
-      gcal_event_set_date_start (self, new_dtstart);
-
-      if (self->dt_end)
+      if (!self->all_day)
         {
-          GDateTime *new_dtend;
+          GDateTime *new_dtstart;
+
+          new_dtstart = g_date_time_to_timezone (self->dt_start, timezone);
+          gcal_event_set_date_start (self, new_dtstart);
 
-          new_dtend = g_date_time_to_timezone (self->dt_end, timezone);
-          gcal_event_set_date_end (self, new_dtend);
+          if (self->dt_end)
+            {
+              GDateTime *new_dtend;
+
+              new_dtend = g_date_time_to_timezone (self->dt_end, timezone);
+              gcal_event_set_date_end (self, new_dtend);
+
+              g_clear_pointer (&new_dtstart, g_date_time_unref);
+            }
 
           g_clear_pointer (&new_dtstart, g_date_time_unref);
         }
 
       g_object_notify (G_OBJECT (self), "timezone");
-
-      g_clear_pointer (&new_dtstart, g_date_time_unref);
     }
 }
 
diff --git a/src/gcal-month-view.c b/src/gcal-month-view.c
index ca87a50..ba2b66e 100644
--- a/src/gcal-month-view.c
+++ b/src/gcal-month-view.c
@@ -264,8 +264,8 @@ show_popover_for_position (GcalMonthView *view,
     {
       GDateTime *start_dt, *end_dt;
 
-      start_dt = g_date_time_new_local (priv->date->year, priv->date->month, start_day, 0, 0, 0);
-      end_dt = g_date_time_new_local (priv->date->year, priv->date->month, end_day + 1, 0, 0, 0);
+      start_dt = g_date_time_new_utc (priv->date->year, priv->date->month, start_day, 0, 0, 0);
+      end_dt = g_date_time_new_utc (priv->date->year, priv->date->month, end_day + 1, 0, 0, 0);
 
       /* Swap dates if start > end */
       if (start_day > end_day)
@@ -750,7 +750,7 @@ add_new_event_button_cb (GtkWidget *button,
   gtk_widget_hide (priv->overflow_popover);
 
   day = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (priv->overflow_popover), "selected-day"));
-  start_date = g_date_time_new_local (priv->date->year, priv->date->month, day, 0, 0, 0);
+  start_date = g_date_time_new_utc (priv->date->year, priv->date->month, day, 0, 0, 0);
 
   g_signal_emit_by_name (GCAL_VIEW (user_data), "create-event-detailed", start_date, NULL);
 
@@ -1081,7 +1081,7 @@ gcal_month_view_size_allocate (GtkWidget     *widget,
   for (l = ppriv->multi_cell_children; l != NULL; l = g_list_next (l))
     {
       gint first_cell, last_cell, first_row, last_row, start, end;
-      gboolean visible;
+      gboolean visible, all_day;
 
       GDateTime *date;
       GcalEvent *event;
@@ -1090,6 +1090,7 @@ gcal_month_view_size_allocate (GtkWidget     *widget,
       child_widget = (GtkWidget*) l->data;
       event = gcal_event_widget_get_event (l->data);
       uuid = gcal_event_get_uid (event);
+      all_day = gcal_event_get_all_day (event);
 
       if (!gtk_widget_is_visible (child_widget) && !g_hash_table_contains (ppriv->hidden_as_overflow, uuid))
         continue;
@@ -1103,7 +1104,8 @@ gcal_month_view_size_allocate (GtkWidget     *widget,
        * month. Otherwise, the first cell is the 1st day of the month.
        */
       j = 1;
-      date = g_date_time_to_local (gcal_event_get_date_start (event));
+      date = gcal_event_get_date_start (event);
+      date = all_day ? g_date_time_ref (date) : g_date_time_to_local (date);
 
       if (g_date_time_get_month (date) == priv->date->month)
         j = g_date_time_get_day_of_month (date);
@@ -1123,14 +1125,15 @@ gcal_month_view_size_allocate (GtkWidget     *widget,
        * if the event is all day or not.
        */
       j = icaltime_days_in_month (priv->date->month, priv->date->year);
-      date = g_date_time_to_local (gcal_event_get_date_end (event));
+      date = gcal_event_get_date_end (event);
+      date = all_day ? g_date_time_ref (date) : g_date_time_to_local (date);
 
       if (g_date_time_get_month (date) == priv->date->month)
         {
           j = g_date_time_get_day_of_month (date);
 
           /* If the event is all day, we have to subtract 1 to find the the real date */
-          if (gcal_event_get_all_day (event))
+          if (all_day)
             j--;
         }
       j += priv->days_delay;
@@ -1855,11 +1858,20 @@ gcal_month_view_get_child_cell (GcalSubscriberView *subscriber,
   gint cell;
 
   event = gcal_event_widget_get_event (child);
-  dt = g_date_time_to_local (gcal_event_get_date_start (event));
+  dt = gcal_event_get_date_start (event);
 
-  cell = g_date_time_get_day_of_month (dt);
+  /* Don't adjust the date when the event is all day */
+  if (gcal_event_get_all_day (event))
+    {
+      cell = g_date_time_get_day_of_month (dt);
+    }
+  else
+    {
+      dt = g_date_time_to_local (dt);
+      cell = g_date_time_get_day_of_month (dt);
 
-  g_clear_pointer (&dt, g_date_time_unref);
+      g_clear_pointer (&dt, g_date_time_unref);
+    }
 
   return cell;
 }
diff --git a/src/gcal-quick-add-popover.c b/src/gcal-quick-add-popover.c
index 744afc1..81948c7 100644
--- a/src/gcal-quick-add-popover.c
+++ b/src/gcal-quick-add-popover.c
@@ -406,7 +406,9 @@ edit_or_create_event (GcalQuickAddPopover *self,
 
   /* Create an ECalComponent from the data above */
   component = build_component_from_details (summary, date_start, date_end);
+
   event = gcal_event_new (source, component);
+  gcal_event_set_all_day (event, TRUE);
 
   /* If we clicked edit button, send a signal; otherwise, create the event */
   if (button == self->add_button)


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