aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items/qquickitemview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/quick/items/qquickitemview.cpp')
-rw-r--r--src/quick/items/qquickitemview.cpp14
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;
}