┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/kitemviews/kfileitemmodel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/kitemviews/kfileitemmodel.cpp')
-rw-r--r--src/kitemviews/kfileitemmodel.cpp22
1 files changed, 16 insertions, 6 deletions
diff --git a/src/kitemviews/kfileitemmodel.cpp b/src/kitemviews/kfileitemmodel.cpp
index 4b026fea3..afc6decee 100644
--- a/src/kitemviews/kfileitemmodel.cpp
+++ b/src/kitemviews/kfileitemmodel.cpp
@@ -1032,12 +1032,22 @@ bool KFileItemModel::lessThan(const ItemData* a, const ItemData* b) const
}
case SizeRole: {
- const KIO::filesize_t sizeA = itemA.size();
- const KIO::filesize_t sizeB = itemB.size();
- if (sizeA < sizeB) {
- result = -1;
- } else if (sizeA > sizeB) {
- result = +1;
+ if (itemA.isDir()) {
+ Q_ASSERT(itemB.isDir()); // see "if (m_sortFoldersFirst || m_sortRole == SizeRole)" above
+
+ const QVariant valueA = a->values.value("size");
+ const QVariant valueB = b->values.value("size");
+
+ if (valueA.isNull()) {
+ result = -1;
+ } else if (valueB.isNull()) {
+ result = +1;
+ } else {
+ result = valueA.value<KIO::filesize_t>() - valueB.value<KIO::filesize_t>();
+ }
+ } else {
+ Q_ASSERT(!itemB.isDir()); // see "if (m_sortFoldersFirst || m_sortRole == SizeRole)" above
+ result = itemA.size() - itemB.size();
}
break;
}