diff options
author | Michael Brasser <mbrasser@ford.com> | 2017-07-10 13:52:35 -0500 |
---|---|---|
committer | Michael Brasser <michael.brasser@live.com> | 2017-08-09 13:20:02 +0000 |
commit | d419377d2041b35639a5ab81688a0bc30b5e2994 (patch) | |
tree | 6bd462b08675da01147417331d1208545c11197a /tests/auto | |
parent | 9e1497bed6f68d76e1ba8639a5ee9ca7056ef503 (diff) |
Fix ListView::StrictlyEnforceRange with resizing delegate
When fixupPosition is called for a ListView with StrictlyEnforceRange,
the original reason for the move is lost, and the fixup is applied
immediately. There are already checks for whether the view is moving,
so expand these checks to include movement caused by highlight.
Change-Id: I25f771b9a529d31dc28acb9f91fcd2b582428200
Task-number: QTBUG-33568
Reviewed-by: Robin Burchell <robin.burchell@crimson.no>
Diffstat (limited to 'tests/auto')
-rw-r--r-- | tests/auto/quick/qquicklistview/data/strictlyenforcerange-resize.qml | 31 | ||||
-rw-r--r-- | tests/auto/quick/qquicklistview/tst_qquicklistview.cpp | 24 |
2 files changed, 55 insertions, 0 deletions
diff --git a/tests/auto/quick/qquicklistview/data/strictlyenforcerange-resize.qml b/tests/auto/quick/qquicklistview/data/strictlyenforcerange-resize.qml new file mode 100644 index 0000000000..338af38475 --- /dev/null +++ b/tests/auto/quick/qquicklistview/data/strictlyenforcerange-resize.qml @@ -0,0 +1,31 @@ +import QtQuick 2.0 + +ListView { + width: 400 + height: 400 + focus: true + + highlightRangeMode: ListView.StrictlyEnforceRange + highlightMoveVelocity: 200 + preferredHighlightBegin: 150 + preferredHighlightEnd: 150 + + property bool completed + Component.onCompleted: completed = true + + model: 10 + delegate: Item { + width: parent.width + height: ListView.isCurrentItem ? 100 : 50 + + Text { + anchors.centerIn: parent + text: index + } + + Behavior on height { + enabled: completed + SmoothedAnimation { velocity: 200 } + } + } +} diff --git a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp index 98c628068d..2eb87b9431 100644 --- a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp +++ b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp @@ -182,6 +182,7 @@ private slots: void snapOneItemCurrentIndexRemoveAnimation(); void QTBUG_9791(); + void QTBUG_33568(); void QTBUG_11105(); void QTBUG_21742(); @@ -3470,6 +3471,29 @@ void tst_QQuickListView::QTBUG_9791() QTRY_COMPARE(listview->contentX(), 590.0); } +void tst_QQuickListView::QTBUG_33568() +{ + QScopedPointer<QQuickView> window(createView()); + window->setSource(testFileUrl("strictlyenforcerange-resize.qml")); + window->show(); + QVERIFY(QTest::qWaitForWindowExposed(window.data())); + + QQuickListView *listview = qobject_cast<QQuickListView*>(window->rootObject()); + QVERIFY(listview != 0); + + // we want to verify that the change animates smoothly, rather than jumping into place + QSignalSpy spy(listview, SIGNAL(contentYChanged())); + + listview->incrementCurrentIndex(); + QTRY_COMPARE(listview->contentY(), -100.0); + QVERIFY(spy.count() > 1); + + spy.clear(); + listview->incrementCurrentIndex(); + QTRY_COMPARE(listview->contentY(), -50.0); + QVERIFY(spy.count() > 1); +} + void tst_QQuickListView::manualHighlight() { QQuickView *window = new QQuickView(0); |