]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Fix wrong grouping of types
authorPeter Penz <peter.penz19@gmail.com>
Sun, 25 Dec 2011 10:35:05 +0000 (11:35 +0100)
committerPeter Penz <peter.penz19@gmail.com>
Sun, 25 Dec 2011 10:39:46 +0000 (11:39 +0100)
- Uninitialized types count as one group
- Let the receiver of the signal itemsMoved() decide whether unmoved items
  really result in an unchanged visual appearance. This might e.g. be the case
  if the grouping is turned on and the group-names change although the items
  themselves have not changed their position.

BUG: 289654
FIXED-IN: 4.8.0

src/kitemviews/kfileitemmodel.cpp

index 0ac9400c99a229b4d8fb97ae498796dcbb95f0f5..0d851dcd9657ed6e0b6a6e82701797784d103f96 100644 (file)
@@ -606,20 +606,19 @@ void KFileItemModel::resortAllItems()
     }
     
     // Determine the indexes that have been moved
-    bool emitItemsMoved = false;
     QList<int> movedToIndexes;
     movedToIndexes.reserve(itemCount);
     for (int i = 0; i < itemCount; i++) {
         const int newIndex = m_items.value(oldUrls.at(i).url());
         movedToIndexes.append(newIndex);
-        if (!emitItemsMoved && newIndex != i) {
-            emitItemsMoved = true;
-        }
     }   
 
-    if (emitItemsMoved) {
-        emit itemsMoved(KItemRange(0, itemCount), movedToIndexes);
-    }
+    // Don't check whether items have really been moved and always emit a
+    // itemsMoved() signal after resorting: In case of grouped items
+    // the groups might change even if the items themselves don't change their
+    // position. Let the receiver of the signal decide whether a check for moved
+    // items makes sense.
+    emit itemsMoved(KItemRange(0, itemCount), movedToIndexes);
     
 #ifdef KFILEITEMMODEL_DEBUG
     kDebug() << "[TIME] Resorting of" << itemCount << "items:" << timer.elapsed();
@@ -1845,12 +1844,12 @@ QList<QPair<int, QVariant> > KFileItemModel::ratingRoleGroups() const
     const int maxIndex = count() - 1;
     QList<QPair<int, QVariant> > groups;
 
-    int groupValue;
+    int groupValue = -1;
     for (int i = 0; i <= maxIndex; ++i) {
         if (isChildItem(i)) {
             continue;
         }
-        const int newGroupValue = m_itemData.at(i)->values.value("rating").toInt();
+        const int newGroupValue = m_itemData.at(i)->values.value("rating", 0).toInt();
         if (newGroupValue != groupValue) {
             groupValue = newGroupValue;
             groups.append(QPair<int, QVariant>(i, newGroupValue));
@@ -1867,15 +1866,17 @@ QList<QPair<int, QVariant> > KFileItemModel::genericStringRoleGroups(const QByte
     const int maxIndex = count() - 1;
     QList<QPair<int, QVariant> > groups;
 
+    bool isFirstGroupValue = true;
     QString groupValue;
     for (int i = 0; i <= maxIndex; ++i) {
         if (isChildItem(i)) {
             continue;
         }
         const QString newGroupValue = m_itemData.at(i)->values.value(role).toString();
-        if (newGroupValue != groupValue) {
+        if (newGroupValue != groupValue || isFirstGroupValue) {
             groupValue = newGroupValue;
             groups.append(QPair<int, QVariant>(i, newGroupValue));
+            isFirstGroupValue = false;
         }
     }