aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/quick/items/qquicklistview.cpp8
-rw-r--r--tests/auto/quick/qquicklistview/tst_qquicklistview.cpp17
2 files changed, 23 insertions, 2 deletions
diff --git a/src/quick/items/qquicklistview.cpp b/src/quick/items/qquicklistview.cpp
index 78a64c5df1..b324e00cac 100644
--- a/src/quick/items/qquicklistview.cpp
+++ b/src/quick/items/qquicklistview.cpp
@@ -3117,7 +3117,7 @@ bool QQuickListViewPrivate::applyInsertionChange(const QQmlChangeSet::Change &ch
}
}
- int prevVisibleCount = visibleItems.count();
+ bool visibleAffected = false;
if (insertResult->visiblePos.isValid() && pos < insertResult->visiblePos) {
// Insert items before the visible item.
int insertionIdx = index;
@@ -3140,6 +3140,7 @@ bool QQuickListViewPrivate::applyInsertionChange(const QQmlChangeSet::Change &ch
if (!item)
return false;
+ visibleAffected = true;
visibleItems.insert(insertionIdx, item);
if (insertionIdx == 0)
insertResult->changedFirstItem = true;
@@ -3171,6 +3172,9 @@ bool QQuickListViewPrivate::applyInsertionChange(const QQmlChangeSet::Change &ch
} else {
qreal to = buffer + displayMarginEnd + tempPos + size();
+
+ visibleAffected = count > 0 && pos < to;
+
for (int i = 0; i < count && pos <= to; ++i) {
FxViewItem *item = 0;
if (change.isMove() && (item = currentChanges.removedItems.take(change.moveKey(modelIndex + i))))
@@ -3221,7 +3225,7 @@ bool QQuickListViewPrivate::applyInsertionChange(const QQmlChangeSet::Change &ch
updateVisibleIndex();
- return visibleItems.count() > prevVisibleCount;
+ return visibleAffected;
}
void QQuickListViewPrivate::translateAndTransitionItemsAfter(int afterModelIndex, const ChangeResult &insertionResult, const ChangeResult &removalResult)
diff --git a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp
index 19f4010f8c..48230891ba 100644
--- a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp
+++ b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp
@@ -633,6 +633,8 @@ void tst_QQuickListView::inserted_more(QQuickItemView::VerticalLayoutDirection v
}
listview->setContentY(contentY);
+ QQuickItemViewPrivate::get(listview)->layout();
+
QList<QPair<QString, QString> > newData;
for (int i=0; i<insertCount; i++)
newData << qMakePair(QString("value %1").arg(i), QString::number(i));
@@ -654,6 +656,16 @@ void tst_QQuickListView::inserted_more(QQuickItemView::VerticalLayoutDirection v
QCOMPARE(item0->y(), itemsOffsetAfterMove);
#endif
+ QList<FxViewItem *> visibleItems = QQuickItemViewPrivate::get(listview)->visibleItems;
+ for (QList<FxViewItem *>::const_iterator itemIt = visibleItems.begin(); itemIt != visibleItems.end(); ++itemIt)
+ {
+ FxViewItem *item = *itemIt;
+ if (item->item->position().y() >= 0 && item->item->position().y() < listview->height())
+ {
+ QVERIFY(!QQuickItemPrivate::get(item->item)->culled);
+ }
+ }
+
QList<QQuickItem*> items = findItems<QQuickItem>(contentItem, "wrapper");
int firstVisibleIndex = -1;
for (int i=0; i<items.count(); i++) {
@@ -774,6 +786,11 @@ void tst_QQuickListView::inserted_more_data()
<< 80.0 // show 4-19
<< 20 << 3
<< 0.0;
+
+ QTest::newRow("add multiple, within visible, content at start")
+ << 0.0
+ << 2 << 50
+ << 0.0;
}
void tst_QQuickListView::insertBeforeVisible()