diff options
author | Bea Lam <bea.lam@nokia.com> | 2012-01-25 17:24:05 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-02-01 08:37:49 +0100 |
commit | 279e4ae7dd9c0b60c2e4dccb31363eb6bac04918 (patch) | |
tree | 64da3fa74828ce2e292c9de176aaaa95bd6a22a4 /src/quick/items/qquickitemview.cpp | |
parent | e77ea6f2fa8e98cb4a03144664a31b6070635a63 (diff) |
Fixes for removing before visible
Account for removing multiple items over visible and non-visible items
and calculate these using the index of the first visible item rather
than the visibleIndex (which can be above the visible position).
Also, don't take the changeBeforeVisible into account if the first
visible is already being adjusted, otherwise it moves back one more row
than it should.
Change-Id: Iea7247102e06697d10eb41301ca689c0cdc35ece
Reviewed-by: Martin Jones <martin.jones@nokia.com>
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; } |