From kde-commits Mon Jan 10 17:52:58 2011 From: =?iso-8859-1?q?Andr=E9_W=F6bbeking?= Date: Mon, 10 Jan 2011 17:52:58 +0000 To: kde-commits Subject: Re: KDE/kdelibs/kfile Message-Id: <201101101852.59597.Woebbeking () kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=129468202923412 On Monday 10 January 2011, Sebastian Trueg wrote: > 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; Why do you call name() with sortCaseSensitivity() == Qt::CaseInsensitive when you already have the case sensitivity in compare()?