diff options
| author | Christian Muehlhaeuser <[email protected]> | 2021-07-10 19:35:26 +0200 |
|---|---|---|
| committer | Elvis Angelaccio <[email protected]> | 2021-07-13 21:48:41 +0200 |
| commit | baaf0c29b857997720b9cb0d584a44306963fb97 (patch) | |
| tree | c634d47101c64260f97bb3c60020282d07f29e01 | |
| parent | 7e0d3e04ce96ce59caeac8cd5aa970530b55c0ab (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.cpp | 18 |
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; } } } |
