From kde-commits Mon Jan 10 13:07:10 2011 From: Sebastian Trueg Date: Mon, 10 Jan 2011 13:07:10 +0000 To: kde-commits Subject: KDE/kdelibs/kfile Message-Id: <20110110130710.46B44AC8B2 () svn ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=129466487529657 SVN commit 1213464 by trueg: When sorting by name KDirSortFilterProxyModel uses UDS_DISPLAY_NAME. The latter, however, is not unique. This results in strange GUI behaviour like swapping items. This patch makes the model fall back to UDS_NAME to ensure a fixed sort order. See also review request http://reviewboard.kde.org/r/6322/ M +10 -1 kdirsortfilterproxymodel.cpp --- trunk/KDE/kdelibs/kfile/kdirsortfilterproxymodel.cpp #1213463:1213464 @@ -168,8 +168,17 @@ switch (left.column()) { case KDirModel::Name: { - return d->compare(leftFileItem.text(), rightFileItem.text(), sortCaseSensitivity()) < 0; + // KFileItem::text() may not be unique (in case UDS_DISPLAY_NAME is used). In that case we + // fall back to the name which is always unique + const int result = d->compare(leftFileItem.text(), rightFileItem.text(), sortCaseSensitivity()); + if (result == 0) { + return d->compare(leftFileItem.name(sortCaseSensitivity() == Qt::CaseInsensitive), + rightFileItem.name(sortCaseSensitivity() == Qt::CaseInsensitive), + sortCaseSensitivity()) < 0; + } else { + return result < 0; } + } case KDirModel::Size: { // If we have two folders, what we have to measure is the number of