diff options
-rw-r--r-- | src/quick/items/qquicklistview.cpp | 8 | ||||
-rw-r--r-- | tests/auto/quick/qquicklistview/data/programmaticFlickAtBounds2.qml | 14 | ||||
-rw-r--r-- | tests/auto/quick/qquicklistview/tst_qquicklistview.cpp | 25 |
3 files changed, 43 insertions, 4 deletions
diff --git a/src/quick/items/qquicklistview.cpp b/src/quick/items/qquicklistview.cpp index 851204ccde..8afd5793fc 100644 --- a/src/quick/items/qquicklistview.cpp +++ b/src/quick/items/qquicklistview.cpp @@ -1603,10 +1603,10 @@ bool QQuickListViewPrivate::flick(AxisData &data, qreal minExtent, qreal maxExte } data.flickTarget = isContentFlowReversed() ? -data.flickTarget+size() : data.flickTarget; if (overShoot) { - if (data.flickTarget >= minExtent) { + if (data.flickTarget > minExtent) { overshootDist = overShootDistance(vSize); data.flickTarget += overshootDist; - } else if (data.flickTarget <= maxExtent) { + } else if (data.flickTarget < maxExtent) { overshootDist = overShootDistance(vSize); data.flickTarget -= overshootDist; } @@ -1626,10 +1626,10 @@ bool QQuickListViewPrivate::flick(AxisData &data, qreal minExtent, qreal maxExte accel = v2 / (2.0f * qAbs(dist)); } else if (overShoot) { data.flickTarget = data.move.value() - dist; - if (data.flickTarget >= minExtent) { + if (data.flickTarget > minExtent) { overshootDist = overShootDistance(vSize); data.flickTarget += overshootDist; - } else if (data.flickTarget <= maxExtent) { + } else if (data.flickTarget < maxExtent) { overshootDist = overShootDistance(vSize); data.flickTarget -= overshootDist; } diff --git a/tests/auto/quick/qquicklistview/data/programmaticFlickAtBounds2.qml b/tests/auto/quick/qquicklistview/data/programmaticFlickAtBounds2.qml new file mode 100644 index 0000000000..08870a46b9 --- /dev/null +++ b/tests/auto/quick/qquicklistview/data/programmaticFlickAtBounds2.qml @@ -0,0 +1,14 @@ +import QtQuick 2.0 + +ListView { + id: view + width: 200; height: 400 + + snapMode: ListView.SnapToItem + + model: 10 + delegate: Rectangle { + width: 200; height: 50 + color: index % 2 ? "red" : "green" + } +} diff --git a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp index 9e8a813d54..b29b2cf3a1 100644 --- a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp +++ b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp @@ -233,6 +233,7 @@ private slots: void QTBUG_38209(); void programmaticFlickAtBounds(); + void programmaticFlickAtBounds2(); void layoutChange(); @@ -7833,6 +7834,30 @@ void tst_QQuickListView::programmaticFlickAtBounds() QVERIFY(!spy.wait(100)); } +void tst_QQuickListView::programmaticFlickAtBounds2() +{ + QScopedPointer<QQuickView> window(createView()); + window->setSource(testFileUrl("programmaticFlickAtBounds2.qml")); + window->show(); + QVERIFY(QTest::qWaitForWindowExposed(window.data())); + + QQuickListView *listview = qobject_cast<QQuickListView *>(window->rootObject()); + QVERIFY(listview); + + // move exactly one item + qreal velocity = -qSqrt(2 * 50 * listview->flickDeceleration()); + + // flick down + listview->flick(0, velocity); + + QTRY_COMPARE(listview->contentY(), qreal(50.0)); + + // flick down + listview->flick(0, velocity); + + QTRY_COMPARE(listview->contentY(), qreal(100.0)); +} + void tst_QQuickListView::layoutChange() { RandomSortModel *model = new RandomSortModel; |