From 8f0a86096685403bf2c46609fae9c960d340e0d8 Mon Sep 17 00:00:00 2001 From: "Kai A. Hiller" Date: Mon, 2 Mar 2020 23:17:57 +0100 Subject: [PATCH] gcal-calender-popover: Make sorting stable When multiple calendars with the same name exist, their relative order in the list is random and changes e.g. when toggling the checkmark next to them. The result is glitchy behavior. Now when two calendars have the same name we do a secondary sort by their ID, resulting in a nice deterministic order. --- src/gui/gcal-calendar-popover.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/gui/gcal-calendar-popover.c b/src/gui/gcal-calendar-popover.c index 90a8566c..de86f54a 100644 --- a/src/gui/gcal-calendar-popover.c +++ b/src/gui/gcal-calendar-popover.c @@ -196,11 +196,17 @@ listbox_sort_func (GtkListBoxRow *row1, gpointer user_data) { GcalCalendar *calendar1, *calendar2; + gint result; calendar1 = g_object_get_data (G_OBJECT (row1), "calendar"); calendar2 = g_object_get_data (G_OBJECT (row2), "calendar"); - return g_ascii_strcasecmp (gcal_calendar_get_name (calendar1), gcal_calendar_get_name (calendar2)); + result = g_ascii_strcasecmp (gcal_calendar_get_name (calendar1), gcal_calendar_get_name (calendar2)); + + if (result != 0) + return result; + + return g_ascii_strcasecmp (gcal_calendar_get_id (calendar1), gcal_calendar_get_id (calendar2)); } static void