[gnome-calendar/wip/pandusonu/week-view: 21/31] week-header: sort events before placing them
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-calendar/wip/pandusonu/week-view: 21/31] week-header: sort events before placing them
- Date: Wed, 2 Nov 2016 16:08:53 +0000 (UTC)
commit a18435c80b8dd4e42ebc25ac6c843596223c4f4d
Author: pandusonu2 <pandu sonu yahoo com>
Date: Thu Jun 30 21:03:06 2016 +0530
week-header: sort events before placing them
Sort the events based on multiday/single day, start date and duration.
src/views/gcal-week-header.c | 26 ++++++++++++++++++++++++++
1 files changed, 26 insertions(+), 0 deletions(-)
---
diff --git a/src/views/gcal-week-header.c b/src/views/gcal-week-header.c
index dd92fd3..8727d8a 100644
--- a/src/views/gcal-week-header.c
+++ b/src/views/gcal-week-header.c
@@ -59,6 +59,9 @@ struct _GcalWeekHeader
static GDateTime* get_start_of_week (GcalWeekHeader *self);
+static gint events_compare_func (GcalEvent *first,
+ GcalEvent *second);
+
static void update_headers (GcalWeekHeader *self);
static void place_events (GcalWeekHeader *self);
@@ -112,6 +115,27 @@ get_start_of_week (GcalWeekHeader *self)
return icaltime_to_datetime (new_date);
}
+static gint
+events_compare_func (GcalEvent *first,
+ GcalEvent *second)
+{
+ gint retval;
+
+ /* Multiday events should come before single day events */
+ if (gcal_event_is_multiday (first) != gcal_event_is_multiday (second))
+ return gcal_event_is_multiday (second) - gcal_event_is_multiday (first);
+
+ /* Compare with respect to start day */
+ retval = g_date_time_compare (gcal_event_get_date_start (first),
+ gcal_event_get_date_start (second));
+
+ if (retval != 0)
+ return retval;
+
+ /* Compare with respect to end day effectively comparing with respect to duration */
+ return g_date_time_compare (gcal_event_get_date_end (second), gcal_event_get_date_end (first));
+}
+
static void
update_headers (GcalWeekHeader *self)
{
@@ -173,6 +197,8 @@ place_events (GcalWeekHeader *self)
week_start = get_start_of_week (self);
iter = g_list_copy (self->events);
+ iter = g_list_sort (iter, (GCompareFunc) events_compare_func);
+
for (l = iter; l != NULL; l = l->next)
{
GcalEvent *event;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]