[gnome-calendar] event: fix comparison if event is today



commit 23cc46a01af9cfdd2ff0949d1c3d4a48830ee847
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Sat Oct 1 20:43:37 2016 -0300

    event: fix comparison if event is today
    
    Since the end times are open-ended, we have to consider the very second
    before the actual end time.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=772104

 src/gcal-event.c |   21 +++++++++++++--------
 1 files changed, 13 insertions(+), 8 deletions(-)
---
diff --git a/src/gcal-event.c b/src/gcal-event.c
index 4f2462e..8b75f87 100644
--- a/src/gcal-event.c
+++ b/src/gcal-event.c
@@ -1360,34 +1360,39 @@ gcal_event_get_uid (GcalEvent *self)
 gboolean
 gcal_event_is_multiday (GcalEvent *self)
 {
-  GDateTime *end_date;
+  GDateTime *end_date, *real_end_date;
+  gboolean is_multiday;
   gint n_days;
 
   g_return_val_if_fail (GCAL_IS_EVENT (self), FALSE);
 
   end_date = gcal_event_get_date_end (self);
-  n_days = g_date_time_difference (end_date, self->dt_start) / G_TIME_SPAN_DAY;
+  real_end_date = g_date_time_add_seconds (end_date, -1);
+  is_multiday = FALSE;
+  n_days = g_date_time_difference (real_end_date, self->dt_start) / G_TIME_SPAN_DAY;
 
   /*
    * An all-day event with only 1 day of time span is treated as a
    * single-day event.
    */
   if (self->all_day && n_days == 1)
-    return FALSE;
+    is_multiday = FALSE;
 
   /*
    * If any of the following fields are different, we're certain that
    * it's a multiday event. Otherwise, we're certain it's NOT a multiday
    * event.
    */
-  if (g_date_time_get_year (self->dt_start) != g_date_time_get_year (end_date) ||
-      g_date_time_get_month (self->dt_start) != g_date_time_get_month (end_date) ||
-      g_date_time_get_day_of_month (self->dt_start) != g_date_time_get_day_of_month (end_date))
+  if (g_date_time_get_year (self->dt_start) != g_date_time_get_year (real_end_date) ||
+      g_date_time_get_month (self->dt_start) != g_date_time_get_month (real_end_date) ||
+      g_date_time_get_day_of_month (self->dt_start) != g_date_time_get_day_of_month (real_end_date))
     {
-      return TRUE;
+      is_multiday = TRUE;
     }
 
-  return FALSE;
+  g_clear_pointer (&real_end_date, g_date_time_unref);
+
+  return is_multiday;
 }
 
 /**


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