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

List:       kde-commits
Subject:    KDE/kdelibs/kfile
From:       Peter Penz <peter.penz () gmx ! at>
Date:       2010-05-17 16:05:37
Message-ID: 20100517160537.B20D7AC8B8 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1127780 by ppenz:

If a case insensitive comparison is done and the strings are equal, a case sensitive \
comparison must be done as fallback to have a deterministic sorting order. Otherwise \
it is possible that items "toggle" during hovering.

BUG: 217048
CCBUG: 237621

 M  +14 -3     kdirsortfilterproxymodel.cpp  


--- trunk/KDE/kdelibs/kfile/kdirsortfilterproxymodel.cpp #1127779:1127780
@@ -50,15 +50,26 @@
             q, SLOT(slotNaturalSortingChanged()));
 }
 
-inline int KDirSortFilterProxyModel::KDirSortFilterProxyModelPrivate::compare(const \
QString& a, +int KDirSortFilterProxyModel::KDirSortFilterProxyModelPrivate::compare(const \
                QString& a,
                                                                               const \
                QString& b,
                                                                               \
Qt::CaseSensitivity caseSensitivity) const  {
-    return m_naturalSorting ? KStringHandler::naturalCompare(a, b, caseSensitivity)
-                            : QString::compare(a, b, caseSensitivity);
+    if (caseSensitivity == Qt::CaseInsensitive) {
+        const int result = m_naturalSorting ? KStringHandler::naturalCompare(a, b, \
Qt::CaseInsensitive) +                                            : \
QString::compare(a, b, Qt::CaseInsensitive); +        if (result != 0) {
+            // Only return the result, if the strings are not equal. If they are \
equal by a case insensitive +            // comparison, still a deterministic sort \
order is required. A case sensitive +            // comparison is done as fallback.
+            return result;
 }
+    }
 
+    return m_naturalSorting ? KStringHandler::naturalCompare(a, b, \
Qt::CaseSensitive) +                            : QString::compare(a, b, \
Qt::CaseSensitive); +}
 
+
 void KDirSortFilterProxyModel::KDirSortFilterProxyModelPrivate::slotNaturalSortingChanged()
  {
     m_naturalSorting = KGlobalSettings::naturalSorting();


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

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