aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items/qquickitemview.cpp
diff options
context:
space:
mode:
authorBea Lam <bea.lam@nokia.com>2012-01-25 17:24:05 +1000
committerQt by Nokia <qt-info@nokia.com>2012-02-01 08:37:49 +0100
commit279e4ae7dd9c0b60c2e4dccb31363eb6bac04918 (patch)
tree64da3fa74828ce2e292c9de176aaaa95bd6a22a4 /src/quick/items/qquickitemview.cpp
parente77ea6f2fa8e98cb4a03144664a31b6070635a63 (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.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;
}