diff options
author | Martin Jones <martin.jones@nokia.com> | 2012-07-10 16:40:06 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-07-11 17:37:55 +0200 |
commit | dd0caf5ad611311621696177adcaf87c33f88a03 (patch) | |
tree | ebc46c8e894a68a6a1fb9e9a6a9ba9da81e48f3e /tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp | |
parent | b5eb3d69b40c4b750a1bbece7be2acbe7cf918e3 (diff) |
pressed and pressedButtons don't work when multiple buttons are pressed
The pressed property would react to any mouse event, regardless of
whether it was in acceptedButtons, or there were other buttons still
pressed. It will now remain true while any button in acceptedButtons
is pressed.
The pressedButtons property could contain buttons not in the
acceptedButtons mask. It will now only contain buttons that are in the
acceptedButtons mask.
Task-number: QTBUG-26458
Change-Id: I6b25cc36a58c113de062d530761dc179d7ef4a5a
Reviewed-by: Michael Brasser <michael.brasser@nokia.com>
Diffstat (limited to 'tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp')
-rw-r--r-- | tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp b/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp index 686c05719d..7d42eb2261 100644 --- a/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp +++ b/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp @@ -82,6 +82,8 @@ private slots: void onWheel(); void transformedMouseArea_data(); void transformedMouseArea(); + void pressedMultipleButtons_data(); + void pressedMultipleButtons(); private: void acceptedButton_data(); @@ -1175,6 +1177,132 @@ void tst_QQuickMouseArea::transformedMouseArea() delete canvas; } +void tst_QQuickMouseArea::pressedMultipleButtons_data() +{ + QTest::addColumn<Qt::MouseButtons>("accepted"); + QTest::addColumn<QList<Qt::MouseButtons> >("buttons"); + QTest::addColumn<QList<bool> >("pressed"); + QTest::addColumn<QList<Qt::MouseButtons> >("pressedButtons"); + QTest::addColumn<int>("changeCount"); + + QList<Qt::MouseButtons> buttons; + QList<bool> pressed; + QList<Qt::MouseButtons> pressedButtons; + buttons << Qt::LeftButton + << (Qt::LeftButton | Qt::RightButton) + << Qt::LeftButton + << 0; + pressed << true + << true + << true + << false; + pressedButtons << Qt::LeftButton + << Qt::LeftButton + << Qt::LeftButton + << 0; + QTest::newRow("Accept Left - Press left, Press Right, Release Right") + << Qt::MouseButtons(Qt::LeftButton) << buttons << pressed << pressedButtons << 2; + + buttons.clear(); + pressed.clear(); + pressedButtons.clear(); + buttons << Qt::LeftButton + << (Qt::LeftButton | Qt::RightButton) + << Qt::RightButton + << 0; + pressed << true + << true + << false + << false; + pressedButtons << Qt::LeftButton + << Qt::LeftButton + << 0 + << 0; + QTest::newRow("Accept Left - Press left, Press Right, Release Left") + << Qt::MouseButtons(Qt::LeftButton) << buttons << pressed << pressedButtons << 2; + + buttons.clear(); + pressed.clear(); + pressedButtons.clear(); + buttons << Qt::LeftButton + << (Qt::LeftButton | Qt::RightButton) + << Qt::LeftButton + << 0; + pressed << true + << true + << true + << false; + pressedButtons << Qt::LeftButton + << (Qt::LeftButton | Qt::RightButton) + << Qt::LeftButton + << 0; + QTest::newRow("Accept Left|Right - Press left, Press Right, Release Right") + << (Qt::LeftButton | Qt::RightButton) << buttons << pressed << pressedButtons << 4; + + buttons.clear(); + pressed.clear(); + pressedButtons.clear(); + buttons << Qt::RightButton + << (Qt::LeftButton | Qt::RightButton) + << Qt::LeftButton + << 0; + pressed << true + << true + << false + << false; + pressedButtons << Qt::RightButton + << Qt::RightButton + << 0 + << 0; + QTest::newRow("Accept Right - Press Right, Press Left, Release Right") + << Qt::MouseButtons(Qt::RightButton) << buttons << pressed << pressedButtons << 2; +} + +void tst_QQuickMouseArea::pressedMultipleButtons() +{ + QFETCH(Qt::MouseButtons, accepted); + QFETCH(QList<Qt::MouseButtons>, buttons); + QFETCH(QList<bool>, pressed); + QFETCH(QList<Qt::MouseButtons>, pressedButtons); + QFETCH(int, changeCount); + + QQuickView *canvas = createView(); + canvas->setSource(testFileUrl("simple.qml")); + canvas->show(); + canvas->requestActivateWindow(); + QVERIFY(canvas->rootObject() != 0); + + QQuickMouseArea *mouseArea = canvas->rootObject()->findChild<QQuickMouseArea *>("mousearea"); + QVERIFY(mouseArea != 0); + + QSignalSpy pressedSpy(mouseArea, SIGNAL(pressedChanged())); + QSignalSpy pressedButtonsSpy(mouseArea, SIGNAL(pressedButtonsChanged())); + mouseArea->setAcceptedMouseButtons(accepted); + + QPoint point(10,10); + + int prevButtons = 0; + for (int i = 0; i < buttons.count(); ++i) { + int btns = buttons.at(i); + + // The windowsysteminterface takes care of sending releases + QTest::mousePress(canvas, (Qt::MouseButton)btns, 0, point); + + QCOMPARE(mouseArea->pressed(), pressed.at(i)); + QCOMPARE(mouseArea->pressedButtons(), pressedButtons.at(i)); + + prevButtons = buttons.at(i); + } + + QTest::mousePress(canvas, Qt::NoButton, 0, point); + QCOMPARE(mouseArea->pressed(), false); + + QCOMPARE(pressedSpy.count(), 2); + QCOMPARE(pressedButtonsSpy.count(), changeCount); + + delete canvas; +} + QTEST_MAIN(tst_QQuickMouseArea) #include "tst_qquickmousearea.moc" |