diff options
author | Bea Lam <bea.lam@nokia.com> | 2011-08-03 15:40:58 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-08-04 09:31:25 +0200 |
commit | b1b50553cf73795e25337d5e5bb70530c90dd350 (patch) | |
tree | 5a4e691400f9ddfacdf7ad5a71472487d014d439 /tests | |
parent | c8cb154e167ae82e464b07aed8c5a0aac1112d9e (diff) |
Fix ListView refill() where delegate size == 0
When refilling, if a delegate item is positioned at the start of the
buffer, it should only be removed if its height is > 0. Otherwise
refill() will constantly remove it in removeNonVisibleItems() and
add it again in the next frame in addVisibleItems().
Regression from aa99d4f5cb4f1f512d1db90536752b518dbea449
Task-number: QTBUG-20712
Change-Id: I21d25fde21e0b559a378c9e202ace58947417a4d
Reviewed-on: http://codereview.qt.nokia.com/2541
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Martin Jones <martin.jones@nokia.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/declarative/qsglistview/tst_qsglistview.cpp | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/tests/auto/declarative/qsglistview/tst_qsglistview.cpp b/tests/auto/declarative/qsglistview/tst_qsglistview.cpp index f4a2384729..6f19692ad0 100644 --- a/tests/auto/declarative/qsglistview/tst_qsglistview.cpp +++ b/tests/auto/declarative/qsglistview/tst_qsglistview.cpp @@ -121,6 +121,7 @@ private slots: void sizeLessThan1(); void QTBUG_14821(); void resizeDelegate(); + void resizeFirstDelegate(); void QTBUG_16037(); void indexAt(); void incrementalModel(); @@ -2717,6 +2718,60 @@ void tst_QSGListView::resizeDelegate() delete canvas; } +void tst_QSGListView::resizeFirstDelegate() +{ + // QTBUG-20712: Content Y jumps constantly if first delegate height == 0 + // and other delegates have height > 0 + + QSGView *canvas = createView(); + canvas->show(); + + // bug only occurs when all items in the model are visible + TestModel model; + for (int i = 0; i < 10; i++) + model.addItem("Item" + QString::number(i), ""); + + QDeclarativeContext *ctxt = canvas->rootContext(); + ctxt->setContextProperty("testModel", &model); + + TestObject *testObject = new TestObject; + ctxt->setContextProperty("testObject", testObject); + + canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/listviewtest.qml")); + qApp->processEvents(); + + QSGListView *listview = findItem<QSGListView>(canvas->rootObject(), "list"); + QVERIFY(listview != 0); + + QSGItem *contentItem = listview->contentItem(); + QVERIFY(contentItem != 0); + + QSGItem *item = 0; + for (int i = 0; i < model.count(); ++i) { + item = findItem<QSGItem>(contentItem, "wrapper", i); + QVERIFY(item != 0); + QCOMPARE(item->y(), i*20.0); + } + + item = findItem<QSGItem>(contentItem, "wrapper", 0); + item->setHeight(0); + + // check the content y has not jumped up and down + QCOMPARE(listview->contentY(), 0.0); + QSignalSpy spy(listview, SIGNAL(contentYChanged())); + QTest::qWait(300); + QCOMPARE(spy.count(), 0); + + for (int i = 1; i < model.count(); ++i) { + item = findItem<QSGItem>(contentItem, "wrapper", i); + QVERIFY(item != 0); + QTRY_COMPARE(item->y(), (i-1)*20.0); + } + + delete testObject; + delete canvas; +} + void tst_QSGListView::QTBUG_16037() { QSGView *canvas = createView(); |