From e897f38eee1350fdd0186da410b4db61286d3196 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Thu, 8 Dec 2016 03:01:52 -0200 Subject: [PATCH] week-header: simplify event addition --- src/views/gcal-week-header.c | 53 +++++++++++++++--------------------- 1 file changed, 22 insertions(+), 31 deletions(-) diff --git a/src/views/gcal-week-header.c b/src/views/gcal-week-header.c index 19a06647..4b6be815 100644 --- a/src/views/gcal-week-header.c +++ b/src/views/gcal-week-header.c @@ -183,25 +183,6 @@ get_today_column (GcalWeekHeader *self) return days_diff; } -static gint -get_event_start_weekday (GcalWeekHeader *self, - GcalEvent *event) -{ - g_autoptr (GDateTime) week_start, event_start; - gint start_weekday; - - week_start = get_start_of_week (self->current_date); - 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) - start_weekday = (g_date_time_get_day_of_week (event_start) - get_first_weekday ()) % 7; - else - start_weekday = 0; - - return start_weekday; -} - static gint compare_events_by_length (GcalEvent *event1, GcalEvent *event2) @@ -1169,27 +1150,37 @@ gcal_week_header_add_event (GcalWeekHeader *self, g_autoptr (GDateTime) end_date = NULL; g_autoptr (GDateTime) week_start = NULL; g_autoptr (GDateTime) week_end = NULL; - gint weekday; - gint width; + gboolean all_day; + gint start, end; g_return_if_fail (GCAL_IS_WEEK_HEADER (self)); + all_day = gcal_event_get_all_day (event); week_start = get_start_of_week (self->active_date); week_end = get_end_of_week (self->active_date); - 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 */ - width = ceil (g_date_time_difference (end_date, start_date) / G_TIME_SPAN_DAY); + if (all_day) + { + start_date = g_date_time_ref (gcal_event_get_date_start (event)); + end_date = g_date_time_ref (gcal_event_get_date_end (event)); + } + else + { + 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)); + } - if (g_date_time_compare (start_date, week_start) < 0) - width -= ceil (g_date_time_difference (week_start, start_date) / G_TIME_SPAN_DAY); + if (datetime_compare_date (start_date, week_start) >= 0) + start = (g_date_time_get_day_of_week (start_date) - get_first_weekday ()) % 7; + else + start = 0; - if (g_date_time_compare (week_end, end_date) < 0) - width -= ceil (g_date_time_difference (end_date, week_end) / G_TIME_SPAN_DAY); + if (g_date_time_compare (end_date, week_end) <= 0) + end = (g_date_time_get_day_of_week (end_date) - get_first_weekday ()) % 7 - all_day; + else + end = 6; - add_event_to_grid (self, event, weekday, weekday + width - 1); + add_event_to_grid (self, event, start, end); /* Check if we eventually can merge events */ check_mergeable_events (self);