┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/kitemviews
diff options
context:
space:
mode:
Diffstat (limited to 'src/kitemviews')
-rw-r--r--src/kitemviews/kfileitemlistwidget.cpp11
-rw-r--r--src/kitemviews/kfileitemmodel.cpp22
2 files changed, 24 insertions, 9 deletions
diff --git a/src/kitemviews/kfileitemlistwidget.cpp b/src/kitemviews/kfileitemlistwidget.cpp
index 5f659a1f6..d6b892658 100644
--- a/src/kitemviews/kfileitemlistwidget.cpp
+++ b/src/kitemviews/kfileitemlistwidget.cpp
@@ -192,13 +192,18 @@ QString KFileItemListWidget::roleText(const QByteArray& role, const QHash<QByteA
if (values.value("isDir").toBool()) {
// The item represents a directory. Show the number of sub directories
// instead of the file size of the directory.
- if (!roleValue.isNull()) {
+ if (roleValue.isNull()) {
+ text = i18nc("@item:intable", "Unknown");
+ } else {
const KIO::filesize_t size = roleValue.value<KIO::filesize_t>();
text = i18ncp("@item:intable", "%1 item", "%1 items", size);
}
} else {
- const KIO::filesize_t size = roleValue.value<KIO::filesize_t>();
- text = KIO::convertSize(size);
+ // Show the size in kilobytes (always round up)
+ const KLocale* locale = KGlobal::locale();
+ const int roundInc = (locale->binaryUnitDialect() == KLocale::MetricBinaryDialect) ? 499 : 511;
+ const KIO::filesize_t size = roleValue.value<KIO::filesize_t>() + roundInc;
+ text = locale->formatByteSize(size, 0, KLocale::DefaultBinaryDialect, KLocale::UnitKiloByte);
}
break;
}
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;
}