diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/declarative/items/qquickgridview.cpp | 4 | ||||
-rw-r--r-- | src/declarative/items/qquicklistview.cpp | 8 |
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) |