┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Muehlhaeuser <[email protected]>2021-07-10 19:35:26 +0200
committerElvis Angelaccio <[email protected]>2021-07-13 21:48:41 +0200
commitbaaf0c29b857997720b9cb0d584a44306963fb97 (patch)
treec634d47101c64260f97bb3c60020282d07f29e01
parent7e0d3e04ce96ce59caeac8cd5aa970530b55c0ab (diff)
Ensure stable sort order when sorting by size
Folders with equal size caused the sort operation to become unstable, as the result of lessThan was non-deterministic. We need the fallback mechanisms at the bottom of the function to resovle the situation and provide a stable sort order. This also fixes expanding the contents of a folder into the wrong parent. BUG: 433247 FIXED-IN: 21.08
-rw-r--r--src/kitemviews/kfileitemmodel.cpp18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/kitemviews/kfileitemmodel.cpp b/src/kitemviews/kfileitemmodel.cpp
index 9441bc871..e03ec7c0e 100644
--- a/src/kitemviews/kfileitemmodel.cpp
+++ b/src/kitemviews/kfileitemmodel.cpp
@@ -1798,17 +1798,25 @@ int KFileItemModel::sortRoleCompare(const ItemData* a, const ItemData* b, const
auto valueB = b->values.value("count");
if (valueA.isNull()) {
if (valueB.isNull()) {
- return 0;
+ result = 0;
+ break;
} else {
- return -1;
+ result = -1;
+ break;
}
} else if (valueB.isNull()) {
- return +1;
+ result = +1;
+ break;
} else {
if (valueA.toLongLong() < valueB.toLongLong()) {
- return -1;
+ result = -1;
+ break;
+ } else if (valueA.toLongLong() > valueB.toLongLong()) {
+ result = +1;
+ break;
} else {
- return +1;
+ result = 0;
+ break;
}
}
}