aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/declarative/items/qquickgridview.cpp4
-rw-r--r--src/declarative/items/qquicklistview.cpp8
2 files changed, 8 insertions, 4 deletions
diff --git a/src/declarative/items/qquickgridview.cpp b/src/declarative/items/qquickgridview.cpp
index f50c362dfd..51131ab742 100644
--- a/src/declarative/items/qquickgridview.cpp
+++ b/src/declarative/items/qquickgridview.cpp
@@ -1802,9 +1802,11 @@ bool QQuickGridViewPrivate::applyInsertionChange(const QDeclarativeChangeSet::In
int from = tempPos - buffer;
while (i >= 0) {
- if (rowPos > from) {
+ if (rowPos > from && insertionIdx < visibleIndex) {
+ // item won't be visible, just note the size for repositioning
insertResult->sizeAddedBeforeVisible += rowSize();
} else {
+ // item is before first visible e.g. in cache buffer
FxViewItem *item = 0;
if (change.isMove() && (item = currentChanges.removedItems.take(change.moveKey(modelIndex + i)))) {
if (item->index > modelIndex + i)
diff --git a/src/declarative/items/qquicklistview.cpp b/src/declarative/items/qquicklistview.cpp
index 4fd4e97da5..60164d51c5 100644
--- a/src/declarative/items/qquicklistview.cpp
+++ b/src/declarative/items/qquicklistview.cpp
@@ -2384,10 +2384,12 @@ bool QQuickListViewPrivate::applyInsertionChange(const QDeclarativeChangeSet::In
int from = tempPos - buffer;
for (i = count-1; i >= 0; --i) {
- if (pos > from) {
- insertResult->sizeAddedBeforeVisible += averageSize;
- pos -= averageSize;
+ if (pos > from && insertionIdx < visibleIndex) {
+ // item won't be visible, just note the size for repositioning
+ insertResult->sizeAddedBeforeVisible += averageSize + spacing;
+ pos -= averageSize + spacing;
} else {
+ // item is before first visible e.g. in cache buffer
FxViewItem *item = 0;
if (change.isMove() && (item = currentChanges.removedItems.take(change.moveKey(modelIndex + i)))) {
if (item->index > modelIndex + i)