week-header: sort events before placing them
Sort the events based on multiday/single day, start date and duration.
This commit is contained in:
committed by
Georges Basile Stavracas Neto
parent
175d22e9ef
commit
4544b39b47
@@ -59,6 +59,9 @@ struct _GcalWeekHeader
|
|||||||
|
|
||||||
static GDateTime* get_start_of_week (GcalWeekHeader *self);
|
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 update_headers (GcalWeekHeader *self);
|
||||||
|
|
||||||
static void place_events (GcalWeekHeader *self);
|
static void place_events (GcalWeekHeader *self);
|
||||||
@@ -112,6 +115,27 @@ get_start_of_week (GcalWeekHeader *self)
|
|||||||
return icaltime_to_datetime (new_date);
|
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
|
static void
|
||||||
update_headers (GcalWeekHeader *self)
|
update_headers (GcalWeekHeader *self)
|
||||||
{
|
{
|
||||||
@@ -173,6 +197,8 @@ place_events (GcalWeekHeader *self)
|
|||||||
week_start = get_start_of_week (self);
|
week_start = get_start_of_week (self);
|
||||||
iter = g_list_copy (self->events);
|
iter = g_list_copy (self->events);
|
||||||
|
|
||||||
|
iter = g_list_sort (iter, (GCompareFunc) events_compare_func);
|
||||||
|
|
||||||
for (l = iter; l != NULL; l = l->next)
|
for (l = iter; l != NULL; l = l->next)
|
||||||
{
|
{
|
||||||
GcalEvent *event;
|
GcalEvent *event;
|
||||||
|
|||||||
Reference in New Issue
Block a user