aboutsummaryrefslogtreecommitdiffstats
path: root/src/declarative/items
diff options
context:
space:
mode:
authorBea Lam <bea.lam@nokia.com>2011-11-16 16:47:56 +1000
committerQt by Nokia <qt-info@nokia.com>2011-11-16 09:07:49 +0100
commit01daf72ee66fb3fb5d9378ecaa42c9ace8bc6c76 (patch)
tree4d0d52c6dc9d25b3ee8953d2d1da752bf9774aa9 /src/declarative/items
parent94007211cfea4a46e5ad7b263a576e1a3095987e (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/declarative/items')
-rw-r--r--src/declarative/items/qquickitemview.cpp18
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.