diff --git a/src/gcal-event-widget.c b/src/gcal-event-widget.c index 38394994..b4a1f04d 100644 --- a/src/gcal-event-widget.c +++ b/src/gcal-event-widget.c @@ -1239,3 +1239,31 @@ gcal_event_widget_compare_by_start_date (GcalEventWidget *widget1, { return g_date_time_compare (widget1->dt_start, widget2->dt_start); } + +gint +gcal_event_widget_sort_events (GcalEventWidget *widget1, + GcalEventWidget *widget2) +{ + g_autoptr (GDateTime) dt_time1, dt_time2; + icaltimetype *ical_dt; + gint diff; + + dt_time1 = dt_time2 = NULL; + diff = gcal_event_widget_compare_by_start_date (widget1, widget2); + + if (diff != 0) + return diff; + + diff = gcal_event_widget_compare_by_length (widget1, widget2); + + if (diff != 0) + return diff; + + e_cal_component_get_last_modified (gcal_event_get_component (widget1->event), &ical_dt); + dt_time1 = icaltime_to_datetime (ical_dt); + + e_cal_component_get_last_modified (gcal_event_get_component (widget2->event), &ical_dt); + dt_time2 = icaltime_to_datetime (ical_dt); + + return g_date_time_compare (dt_time2, dt_time1); +} diff --git a/src/gcal-event-widget.h b/src/gcal-event-widget.h index 7d23e8e9..2cadca7c 100644 --- a/src/gcal-event-widget.h +++ b/src/gcal-event-widget.h @@ -70,6 +70,9 @@ gint gcal_event_widget_compare_by_length (GcalEventWidget * gint gcal_event_widget_compare_by_start_date (GcalEventWidget *widget1, GcalEventWidget *widget2); +gint gcal_event_widget_sort_events (GcalEventWidget *widget1, + GcalEventWidget *widget2); + G_END_DECLS #endif /* __GCAL_EVENT_WIDGET_H__ */ diff --git a/src/gcal-subscriber-view.c b/src/gcal-subscriber-view.c index 9b9368a3..37a969bd 100644 --- a/src/gcal-subscriber-view.c +++ b/src/gcal-subscriber-view.c @@ -240,7 +240,7 @@ gcal_subscriber_view_add (GtkContainer *container, if (gcal_event_is_multiday (event)) { priv->multi_cell_children = g_list_insert_sorted (priv->multi_cell_children, widget, - (GCompareFunc) gcal_event_widget_compare_by_length); + (GCompareFunc) gcal_event_widget_sort_events); } else {