┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/kitemviews/kfileitemmodel.cpp
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2011-11-04 21:54:01 +0100
committerPeter Penz <[email protected]>2011-11-04 21:58:32 +0100
commiteadbf920b5dffdf2d1548240c25ec2eaf835aad5 (patch)
treefec0857c4a8b95cdaaa6756f50b9412c35b58668 /src/kitemviews/kfileitemmodel.cpp
parentd27f776cd2675e67b70556ad4033230435d89d8e (diff)
Don't use mixed units in size-column of details-view
This makes it tricky to compare the filesizes without adjusting the sort-order, so now all sizes in the size-column are shown in KiB or KB (dependent on the KLocale setting). BUG: 219932 FIXED-IN: 4.8.0 Related fixes: - Stay consistent with the rounding when using the KiB/KB unit in the statusbar. - Fix sorting-by-size issue for folders - Show "Unknown" in the size-column when the number of items cannot be determined.
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;
}