]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Keep the "item size hints" of moved items
authorFrank Reininghaus <frank78ac@googlemail.com>
Fri, 5 Jul 2013 17:42:39 +0000 (19:42 +0200)
committerFrank Reininghaus <frank78ac@googlemail.com>
Fri, 5 Jul 2013 17:42:39 +0000 (19:42 +0200)
It's quite expensive to re-calculate them, so we should better just move
them to the correct position, rather than throwing them away.

REVIEW: 111399

src/kitemviews/kitemlistview.cpp
src/kitemviews/private/kitemlistsizehintresolver.cpp
src/kitemviews/private/kitemlistsizehintresolver.h

index 2ea6657a5a91962b37a758f093186698a78f9ce7..347a4e6ea19601d9e88491ac3f31238435589c36 100644 (file)
@@ -1165,7 +1165,7 @@ void KItemListView::slotItemsRemoved(const KItemRangeList& itemRanges)
 
 void KItemListView::slotItemsMoved(const KItemRange& itemRange, const QList<int>& movedToIndexes)
 {
-    m_sizeHintResolver->itemsMoved(itemRange.index, itemRange.count);
+    m_sizeHintResolver->itemsMoved(itemRange, movedToIndexes);
     m_layouter->markAsDirty();
 
     if (m_controller) {
index 5db87f34dbb246edf1c76aef91cff468ebe4077e..e44630243b1c148325f26689a2a03d093563c68a 100644 (file)
@@ -114,13 +114,17 @@ void KItemListSizeHintResolver::itemsRemoved(const KItemRangeList& itemRanges)
     }
 }
 
-void KItemListSizeHintResolver::itemsMoved(int index, int count)
+void KItemListSizeHintResolver::itemsMoved(const KItemRange& range, const QList<int>& movedToIndexes)
 {
-    while (count) {
-        m_sizeHintCache[index] = QSizeF();
-        ++index;
-        --count;
+    QVector<QSizeF> newSizeHintCache(m_sizeHintCache);
+
+    const int movedRangeEnd = range.index + range.count;
+    for (int i = range.index; i < movedRangeEnd; ++i) {
+        const int newIndex = movedToIndexes.at(i);
+        newSizeHintCache[newIndex] = m_sizeHintCache.at(i);
     }
+
+    m_sizeHintCache = newSizeHintCache;
 }
 
 void KItemListSizeHintResolver::itemsChanged(int index, int count, const QSet<QByteArray>& roles)
index 5ec5f4a2151b7752a0939a0847b527e07e7bb247..486f9b6313f0771842f932c6a2e8e0a6b13e618c 100644 (file)
@@ -40,7 +40,7 @@ public:
 
     void itemsInserted(const KItemRangeList& itemRanges);
     void itemsRemoved(const KItemRangeList& itemRanges);
-    void itemsMoved(int index, int count);
+    void itemsMoved(const KItemRange& range, const QList<int>& movedToIndexes);
     void itemsChanged(int index, int count, const QSet<QByteArray>& roles);
 
     void clearCache();