diff options
Diffstat (limited to 'src/quick/items/qquickitemview.cpp')
-rw-r--r-- | src/quick/items/qquickitemview.cpp | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/quick/items/qquickitemview.cpp b/src/quick/items/qquickitemview.cpp index 6577617091..3b264ab96b 100644 --- a/src/quick/items/qquickitemview.cpp +++ b/src/quick/items/qquickitemview.cpp @@ -1426,8 +1426,11 @@ bool QQuickItemViewPrivate::applyModelChanges() FxViewItem *prevFirstVisible = firstVisibleItem(); QDeclarativeNullableValue<qreal> prevViewPos; - if (prevFirstVisible) + int prevFirstVisibleIndex = -1; + if (prevFirstVisible) { prevViewPos = prevFirstVisible->position(); + prevFirstVisibleIndex = prevFirstVisible->index; + } qreal prevVisibleItemsFirstPos = visibleItems.count() ? visibleItems.first()->position() : 0.0; const QVector<QDeclarativeChangeSet::Remove> &removals = currentChanges.pendingChanges.removes(); @@ -1442,6 +1445,12 @@ bool QQuickItemViewPrivate::applyModelChanges() visibleAffected = true; if (!visibleAffected && needsRefillForAddedOrRemovedIndex(removals[i].index)) visibleAffected = true; + if (prevFirstVisibleIndex >= 0 && removals[i].index < prevFirstVisibleIndex) { + if (removals[i].index + removals[i].count < prevFirstVisibleIndex) + removalResult.changeBeforeVisible -= removals[i].count; + else + removalResult.changeBeforeVisible -= (prevFirstVisibleIndex - removals[i].index); + } } if (!removals.isEmpty()) { updateVisibleIndex(); @@ -1557,9 +1566,6 @@ bool QQuickItemViewPrivate::applyRemovalChange(const QDeclarativeChangeSet::Remo } } - if (removal.index + removal.count < visibleIndex) - removeResult->changeBeforeVisible -= removal.count; - return visibleAffected; } |