diff options
author | Bea Lam <bea.lam@nokia.com> | 2011-11-16 16:47:56 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-11-16 09:07:49 +0100 |
commit | 01daf72ee66fb3fb5d9378ecaa42c9ace8bc6c76 (patch) | |
tree | 4d0d52c6dc9d25b3ee8953d2d1da752bf9774aa9 /src | |
parent | 94007211cfea4a46e5ad7b263a576e1a3095987e (diff) |
Fix for moving multiple items to top of view
Top item wasn't positioned correctly when moving multiple items
backwards to the top of the view. Don't move visibleItems.first() if
we've already repositioned the top item correctly.
Task-number: QTBUG-22762
Change-Id: Ib216adea719044ee55349478237473ff3194a326
Reviewed-by: Martin Jones <martin.jones@nokia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/declarative/items/qquickitemview.cpp | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/src/declarative/items/qquickitemview.cpp b/src/declarative/items/qquickitemview.cpp index 79787d777c..63855ae7cb 100644 --- a/src/declarative/items/qquickitemview.cpp +++ b/src/declarative/items/qquickitemview.cpp @@ -1491,18 +1491,18 @@ bool QQuickItemViewPrivate::applyModelChanges() // if the first visible item has moved, ensure another one takes its place // so that we avoid shifting all content forwards // (if an item is removed from before the first visible, the first visible should not move upwards) + bool movedBackToFirstVisible = false; if (firstVisible && firstItemIndex >= 0) { - bool found = false; for (int i=0; i<insertResult.movedBackwards.count(); i++) { if (insertResult.movedBackwards[i]->index == firstItemIndex) { // an item has moved backwards up to the first visible's position resetItemPosition(insertResult.movedBackwards[i], firstVisible); insertResult.movedBackwards.removeAt(i); - found = true; + movedBackToFirstVisible = true; break; } } - if (!found && !allInsertionsBeforeVisible) { + if (!movedBackToFirstVisible && !allInsertionsBeforeVisible) { // first visible item has moved forward, another visible item takes its place FxViewItem *item = visibleItem(firstItemIndex); if (item) @@ -1516,10 +1516,14 @@ bool QQuickItemViewPrivate::applyModelChanges() // since it will be used to position all subsequent items if (insertResult.movedBackwards.count() && origVisibleItemsFirst) resetItemPosition(visibleItems.first(), origVisibleItemsFirst); - qreal moveBackwardsBy = insertResult.sizeAddedBeforeVisible; - for (int i=0; i<insertResult.movedBackwards.count(); i++) - moveBackwardsBy += insertResult.movedBackwards[i]->size(); - moveItemBy(visibleItems.first(), removedBeforeFirstVisibleBy, moveBackwardsBy); + + // correct the first item position (unless it has already been fixed) + if (!movedBackToFirstVisible) { + qreal moveBackwardsBy = insertResult.sizeAddedBeforeVisible; + for (int i=0; i<insertResult.movedBackwards.count(); i++) + moveBackwardsBy += insertResult.movedBackwards[i]->size(); + moveItemBy(visibleItems.first(), removedBeforeFirstVisibleBy, moveBackwardsBy); + } } // Whatever removed/moved items remain are no longer visible items. |