From: J-P Nurmi Date: Thu, 2 Jan 2014 20:35:50 +0000 (+0100) Subject: Item views: avoid fixing up the position while moving/flicking X-Git-Tag: upstream/5.3.1~290 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b244fc002d4fb97abb8647ed07f6e927cf3de789;p=platform%2Fupstream%2Fqtdeclarative.git Item views: avoid fixing up the position while moving/flicking Task-number: QTBUG-35920 Change-Id: Id6a68400eed69d880dd1c218ec4a1beda8a8fbb9 Reviewed-by: Alan Alpert --- diff --git a/src/quick/items/qquickitemview.cpp b/src/quick/items/qquickitemview.cpp index 020d486..e51a562 100644 --- a/src/quick/items/qquickitemview.cpp +++ b/src/quick/items/qquickitemview.cpp @@ -686,7 +686,8 @@ void QQuickItemView::setPreferredHighlightBegin(qreal start) d->haveHighlightRange = d->highlightRange != NoHighlightRange && d->highlightRangeStart <= d->highlightRangeEnd; if (isComponentComplete()) { d->updateViewport(); - d->fixupPosition(); + if (!isMoving() && !isFlicking()) + d->fixupPosition(); } emit preferredHighlightBeginChanged(); } @@ -700,7 +701,8 @@ void QQuickItemView::resetPreferredHighlightBegin() d->highlightRangeStart = 0; if (isComponentComplete()) { d->updateViewport(); - d->fixupPosition(); + if (!isMoving() && !isFlicking()) + d->fixupPosition(); } emit preferredHighlightBeginChanged(); } @@ -721,7 +723,8 @@ void QQuickItemView::setPreferredHighlightEnd(qreal end) d->haveHighlightRange = d->highlightRange != NoHighlightRange && d->highlightRangeStart <= d->highlightRangeEnd; if (isComponentComplete()) { d->updateViewport(); - d->fixupPosition(); + if (!isMoving() && !isFlicking()) + d->fixupPosition(); } emit preferredHighlightEndChanged(); } @@ -735,7 +738,8 @@ void QQuickItemView::resetPreferredHighlightEnd() d->highlightRangeEnd = 0; if (isComponentComplete()) { d->updateViewport(); - d->fixupPosition(); + if (!isMoving() && !isFlicking()) + d->fixupPosition(); } emit preferredHighlightEndChanged(); } diff --git a/tests/auto/quick/qquicklistview/data/qtbug35920.qml b/tests/auto/quick/qquicklistview/data/qtbug35920.qml new file mode 100644 index 0000000..14853e3 --- /dev/null +++ b/tests/auto/quick/qquicklistview/data/qtbug35920.qml @@ -0,0 +1,12 @@ +import QtQuick 2.1 + +ListView { + width: 200 + height: 200 + + snapMode: ListView.SnapOneItem + highlightRangeMode: ListView.StrictlyEnforceRange + + model: 100 + delegate: Text { text: modelData } +} diff --git a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp index 5651806..efd0fa8 100644 --- a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp +++ b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp @@ -221,6 +221,7 @@ private slots: void highlightItemGeometryChanges(); void QTBUG_36481(); + void QTBUG_35920(); private: template void items(const QUrl &source); @@ -7152,6 +7153,36 @@ void tst_QQuickListView::QTBUG_36481() QScopedPointer object(component.create()); } +void tst_QQuickListView::QTBUG_35920() +{ + QScopedPointer window(createView()); + window->setSource(testFileUrl("qtbug35920.qml")); + window->show(); + QVERIFY(QTest::qWaitForWindowExposed(window.data())); + + QQuickListView *listview = qobject_cast(window->rootObject()); + QVERIFY(listview); + + QTest::mousePress(window.data(), Qt::LeftButton, 0, QPoint(10,0)); + for (int i = 0; i < 100; ++i) { + QTest::mouseMove(window.data(), QPoint(10,i)); + if (listview->isMoving()) { + // do not fixup() the position while in movement to avoid flicker + const qreal contentY = listview->contentY(); + listview->setPreferredHighlightBegin(i); + QCOMPARE(listview->contentY(), contentY); + listview->resetPreferredHighlightBegin(); + QCOMPARE(listview->contentY(), contentY); + + listview->setPreferredHighlightEnd(i+10); + QCOMPARE(listview->contentY(), contentY); + listview->resetPreferredHighlightEnd(); + QCOMPARE(listview->contentY(), contentY); + } + } + QTest::mouseRelease(window.data(), Qt::LeftButton, 0, QPoint(10,100)); +} + QTEST_MAIN(tst_QQuickListView) #include "tst_qquicklistview.moc"