diff options
Diffstat (limited to 'src/quick/items/qquicklistview.cpp')
-rw-r--r-- | src/quick/items/qquicklistview.cpp | 30 |
1 files changed, 17 insertions, 13 deletions
diff --git a/src/quick/items/qquicklistview.cpp b/src/quick/items/qquicklistview.cpp index ab8e9a7854..cc500956f5 100644 --- a/src/quick/items/qquicklistview.cpp +++ b/src/quick/items/qquicklistview.cpp @@ -1145,9 +1145,11 @@ void QQuickListViewPrivate::updateSections() if (visibleIndex > 0) prevSection = sectionAt(visibleIndex-1); QQuickListViewAttached *prevAtt = 0; + int prevIdx = -1; int idx = -1; for (int i = 0; i < visibleItems.count(); ++i) { - QQuickListViewAttached *attached = static_cast<QQuickListViewAttached*>(visibleItems.at(i)->attached); + FxViewItem *item = visibleItems.at(i); + QQuickListViewAttached *attached = static_cast<QQuickListViewAttached*>(item->attached); attached->setPrevSection(prevSection); if (visibleItems.at(i)->index != -1) { QString propValue = model->stringValue(visibleItems.at(i)->index, sectionCriteria->property()); @@ -1156,9 +1158,10 @@ void QQuickListViewPrivate::updateSections() } updateInlineSection(static_cast<FxListItemSG*>(visibleItems.at(i))); if (prevAtt) - prevAtt->setNextSection(attached->section()); + prevAtt->setNextSection(sectionAt(prevIdx+1)); prevSection = attached->section(); prevAtt = attached; + prevIdx = item->index; } if (prevAtt) { if (idx > 0 && idx < model->count()-1) @@ -3075,6 +3078,18 @@ bool QQuickListViewPrivate::applyInsertionChange(const QQmlChangeSet::Change &ch : visibleItems.last()->endPosition()+spacing; } + // Update the indexes of the following visible items. + for (int i = 0; i < visibleItems.count(); ++i) { + FxViewItem *item = visibleItems.at(i); + if (item->index != -1 && item->index >= modelIndex) { + item->index += count; + if (change.isMove()) + item->transitionNextReposition(transitioner, QQuickItemViewTransitioner::MoveTransition, false); + else + item->transitionNextReposition(transitioner, QQuickItemViewTransitioner::AddTransition, false); + } + } + int prevVisibleCount = visibleItems.count(); if (insertResult->visiblePos.isValid() && pos < insertResult->visiblePos) { // Insert items before the visible item. @@ -3140,17 +3155,6 @@ bool QQuickListViewPrivate::applyInsertionChange(const QQmlChangeSet::Change &ch } } - for (; index < visibleItems.count(); ++index) { - FxViewItem *item = visibleItems.at(index); - if (item->index != -1) { - item->index += count; - if (change.isMove()) - item->transitionNextReposition(transitioner, QQuickItemViewTransitioner::MoveTransition, false); - else - item->transitionNextReposition(transitioner, QQuickItemViewTransitioner::AddTransition, false); - } - } - updateVisibleIndex(); return visibleItems.count() > prevVisibleCount; |