From ee3faf24b9a5a206d7f5365e1957f54d048d3962 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Wed, 11 Dec 2019 01:22:20 +0100 Subject: [PATCH] sortlistmodel: Make sort stable The sort of the sortlistmodel is now stable with respect to the original list model. That means that if the sorter compares items as equal, the model will make sure those items keep the order they were in in the original model. Or in other words: The model guarantees a total order based on the item's position in the original model. --- gtk/gtksortlistmodel.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/gtk/gtksortlistmodel.c b/gtk/gtksortlistmodel.c index 2fa9de9944..5444ee74ae 100644 --- a/gtk/gtksortlistmodel.c +++ b/gtk/gtksortlistmodel.c @@ -181,8 +181,14 @@ _sort_func (gconstpointer item1, { GtkSortListEntry *entry1 = (GtkSortListEntry *) item1; GtkSortListEntry *entry2 = (GtkSortListEntry *) item2; + GtkOrdering result; - return gtk_sorter_compare (GTK_SORTER (data), entry1->item, entry2->item); + result = gtk_sorter_compare (GTK_SORTER (data), entry1->item, entry2->item); + + if (result == GTK_ORDERING_EQUAL) + result = g_sequence_iter_compare (entry1->unsorted_iter, entry2->unsorted_iter); + + return result; } static void