diff --git a/src/kitemviews/kfileitemmodel.cpp b/src/kitemviews/kfileitemmodel.cpp --- a/src/kitemviews/kfileitemmodel.cpp +++ b/src/kitemviews/kfileitemmodel.cpp @@ -1828,8 +1828,16 @@ default: { const QByteArray role = roleForType(m_sortRole); - result = QString::compare(a->values.value(role).toString(), - b->values.value(role).toString()); + QString aRoleValue = a->values.value(role).toString(); + QString bRoleValue = b->values.value(role).toString(); + //Non-empty values should come first, see https://bugs.kde.org/show_bug.cgi?id=410538 + if (!aRoleValue.isEmpty() && bRoleValue.isEmpty()) { + result = -1; + } else if (aRoleValue.isEmpty() && !bRoleValue.isEmpty()) { + result = +1; + } else { + result = QString::compare(aRoleValue, bRoleValue); + } break; }