[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdelibs/kfile
From:       Sebastian Trueg <sebastian () trueg ! de>
Date:       2011-01-10 13:07:10
Message-ID: 20110110130710.46B44AC8B2 () svn ! kde ! org
[Download RAW message or body]

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
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic