diff --git a/src/kitemviews/kitemlistview.cpp b/src/kitemviews/kitemlistview.cpp index 2ea6657a5a..347a4e6ea1 100644 --- a/src/kitemviews/kitemlistview.cpp +++ b/src/kitemviews/kitemlistview.cpp @@ -1165,7 +1165,7 @@ void KItemListView::slotItemsRemoved(const KItemRangeList& itemRanges) void KItemListView::slotItemsMoved(const KItemRange& itemRange, const QList& movedToIndexes) { - m_sizeHintResolver->itemsMoved(itemRange.index, itemRange.count); + m_sizeHintResolver->itemsMoved(itemRange, movedToIndexes); m_layouter->markAsDirty(); if (m_controller) { diff --git a/src/kitemviews/private/kitemlistsizehintresolver.cpp b/src/kitemviews/private/kitemlistsizehintresolver.cpp index 5db87f34db..e44630243b 100644 --- a/src/kitemviews/private/kitemlistsizehintresolver.cpp +++ b/src/kitemviews/private/kitemlistsizehintresolver.cpp @@ -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& movedToIndexes) { - while (count) { - m_sizeHintCache[index] = QSizeF(); - ++index; - --count; + QVector 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& roles) diff --git a/src/kitemviews/private/kitemlistsizehintresolver.h b/src/kitemviews/private/kitemlistsizehintresolver.h index 5ec5f4a215..486f9b6313 100644 --- a/src/kitemviews/private/kitemlistsizehintresolver.h +++ b/src/kitemviews/private/kitemlistsizehintresolver.h @@ -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& movedToIndexes); void itemsChanged(int index, int count, const QSet& roles); void clearCache();