[gnome-calendar/wip/pandusonu/week-view: 3/21] week-header: fix date handling



commit 1c48d0a543775ed2eeebd79dcb173301bbe49be7
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Thu Dec 8 00:21:36 2016 -0200

    week-header: fix date handling

 src/views/gcal-week-header.c |   71 +++++++++++++++++++-----------------------
 1 files changed, 32 insertions(+), 39 deletions(-)
---
diff --git a/src/views/gcal-week-header.c b/src/views/gcal-week-header.c
index 093afa1..72307c5 100644
--- a/src/views/gcal-week-header.c
+++ b/src/views/gcal-week-header.c
@@ -136,18 +136,24 @@ static GDateTime*
 get_start_of_week (icaltimetype *date)
 {
   icaltimetype *new_date;
+  GDateTime *dt;
 
   new_date = g_new0 (icaltimetype, 1);
-  *new_date = icaltime_from_day_of_year (icaltime_start_doy_week (*(date), get_first_weekday () + 1),
+  *new_date = icaltime_from_day_of_year (icaltime_start_doy_week (*date, get_first_weekday () + 1),
                                          date->year);
   new_date->is_date = 0;
   new_date->hour = 0;
   new_date->minute = 0;
   new_date->second = 0;
 
-  *new_date = icaltime_set_timezone (new_date, date->zone);
+  dt = g_date_time_new_local (new_date->year,
+                              new_date->month,
+                              new_date->day,
+                              0, 0, 0);
 
-  return icaltime_to_datetime (new_date);
+  g_clear_pointer (&new_date, g_free);
+
+  return dt;
 }
 
 static GDateTime*
@@ -184,11 +190,11 @@ static gint
 get_event_start_weekday (GcalWeekHeader *self,
                          GcalEvent      *event)
 {
-  GDateTime *week_start, *event_start;
+  g_autoptr (GDateTime) week_start, event_start;
   gint start_weekday;
 
   week_start = get_start_of_week (self->current_date);
-  event_start = gcal_event_get_date_start (event);
+  event_start = g_date_time_to_local (gcal_event_get_date_start (event));
 
   /* Only calculate the start day if it starts in the current week */
   if (g_date_time_compare (event_start, week_start) >= 0)
@@ -196,8 +202,6 @@ get_event_start_weekday (GcalWeekHeader *self,
   else
     start_weekday = 0;
 
-  g_clear_pointer (&week_start, g_date_time_unref);
-
   return start_weekday;
 }
 
@@ -244,7 +248,7 @@ is_event_visible (GcalWeekHeader *self,
 }
 
 static void
-update_overflow_labels (GcalWeekHeader *self)
+update_overflow (GcalWeekHeader *self)
 {
   gint i;
 
@@ -451,12 +455,14 @@ split_event_widget_at_column (GcalWeekHeader *self,
   /* Create a new widget after the current widget */
   if (create_after)
     {
+      g_autoptr (GDateTime) event_end;
       GtkWidget *widget_after;
 
+      event_end = g_date_time_to_local (gcal_event_widget_get_date_end (GCAL_EVENT_WIDGET (widget)));
+
       widget_after = gcal_event_widget_clone (GCAL_EVENT_WIDGET (widget));
       gcal_event_widget_set_date_start (GCAL_EVENT_WIDGET (widget_after), end_column_date);
-      gcal_event_widget_set_date_end (GCAL_EVENT_WIDGET (widget_after),
-                                      gcal_event_widget_get_date_end (GCAL_EVENT_WIDGET (widget)));
+      gcal_event_widget_set_date_end (GCAL_EVENT_WIDGET (widget_after), event_end);
 
       gtk_grid_attach (GTK_GRID (self->grid),
                        widget_after,
@@ -531,7 +537,8 @@ add_event_to_grid (GcalWeekHeader *self,
                    gint            start,
                    gint            end)
 {
-  GDateTime *week_start, *week_end, *widget_end_dt;
+  g_autoptr (GDateTime) week_start = NULL;
+  g_autoptr (GDateTime) week_end = NULL;
   GtkWidget *widget;
   gint position;
   gint i;
@@ -561,11 +568,8 @@ add_event_to_grid (GcalWeekHeader *self,
   week_start = get_start_of_week (self->active_date);
   week_end = get_end_of_week (self->active_date);
 
-  /* Setup the event's start date */
-  widget_end_dt = g_date_time_add_days (week_start, 1);
-
   gcal_event_widget_set_date_start (GCAL_EVENT_WIDGET (widget), week_start);
-  gcal_event_widget_set_date_end (GCAL_EVENT_WIDGET (widget), widget_end_dt);
+  gcal_event_widget_set_date_end (GCAL_EVENT_WIDGET (widget), week_end);
 
   /*
    * In addition to moving the current column's events below, multiday
@@ -574,11 +578,8 @@ add_event_to_grid (GcalWeekHeader *self,
    */
   for (i = start + 1; i <= end; i++)
     {
-      GDateTime *new_widget_end_dt;
       gint new_position;
 
-      new_widget_end_dt = g_date_time_add_days (widget_end_dt, 1);
-
       /* Add the event to that day */
       new_position = add_event_to_weekday (self, event, i);
 
@@ -618,18 +619,10 @@ add_event_to_grid (GcalWeekHeader *self,
         }
 
       /* Update the widget's end date */
-      gcal_event_widget_set_date_end (GCAL_EVENT_WIDGET (widget), new_widget_end_dt);
-
-      g_clear_pointer (&widget_end_dt, g_date_time_unref);
-
-      widget_end_dt = new_widget_end_dt;
+      gcal_event_widget_set_date_end (GCAL_EVENT_WIDGET (widget), week_end);
     }
 
   gtk_widget_show (widget);
-
-  g_clear_pointer (&widget_end_dt, g_date_time_unref);
-  g_clear_pointer (&week_start, g_date_time_unref);
-  g_clear_pointer (&week_end, g_date_time_unref);
 }
 
 static void
@@ -658,10 +651,10 @@ update_unchanged_events (GcalWeekHeader *self,
 
       for (l = events; l != NULL; l = l->next)
         {
-          GDateTime *event_start, *event_end;
+          g_autoptr (GDateTime) event_start, event_end;
 
-          event_start = gcal_event_get_date_start (l->data);
-          event_end = gcal_event_get_date_end (l->data);
+          event_start = g_date_time_to_local (gcal_event_get_date_start (l->data));
+          event_end = g_date_time_to_local (gcal_event_get_date_end (l->data));
 
           /*
            * Check if the event must be updated. If we're going to the future, updatable events
@@ -767,7 +760,7 @@ header_collapse (GcalWeekHeader *self)
       gtk_widget_set_visible (l->data, is_event_visible (self, left_attach, top_attach - 1));
     }
 
-  update_overflow_labels (self);
+  update_overflow (self);
 
   g_clear_pointer (&children, g_list_free);
 }
@@ -1121,7 +1114,10 @@ void
 gcal_week_header_add_event (GcalWeekHeader *self,
                             GcalEvent      *event)
 {
-  GDateTime *start_date, *end_date, *week_start, *week_end;
+  g_autoptr (GDateTime) start_date = NULL;
+  g_autoptr (GDateTime) end_date = NULL;
+  g_autoptr (GDateTime) week_start = NULL;
+  g_autoptr (GDateTime) week_end = NULL;
   gint weekday;
   gint width;
 
@@ -1129,8 +1125,8 @@ gcal_week_header_add_event (GcalWeekHeader *self,
 
   week_start = get_start_of_week (self->active_date);
   week_end = get_end_of_week (self->active_date);
-  start_date = gcal_event_get_date_start (event);
-  end_date = gcal_event_get_date_end (event);
+  start_date = g_date_time_to_local (gcal_event_get_date_start (event));
+  end_date = g_date_time_to_local (gcal_event_get_date_end (event));
   weekday = get_event_start_weekday (self, event);
 
   /* Calculate the real width of this event */
@@ -1148,10 +1144,7 @@ gcal_week_header_add_event (GcalWeekHeader *self,
   check_mergeable_events (self);
 
   /* And also update the overflow labels */
-  update_overflow_labels (self);
-
-  g_clear_pointer (&week_end, g_date_time_unref);
-  g_clear_pointer (&week_start, g_date_time_unref);
+  update_overflow (self);
 }
 
 void
@@ -1210,7 +1203,7 @@ gcal_week_header_remove_event (GcalWeekHeader *self,
   check_mergeable_events (self);
 
   /* And also update the overflow labels */
-  update_overflow_labels (self);
+  update_overflow (self);
 
   g_clear_pointer (&children, g_list_free);
 }


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