aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp
diff options
context:
space:
mode:
authorMartin Jones <martin.jones@nokia.com>2012-07-10 16:40:06 +1000
committerQt by Nokia <qt-info@nokia.com>2012-07-11 17:37:55 +0200
commitdd0caf5ad611311621696177adcaf87c33f88a03 (patch)
treeebc46c8e894a68a6a1fb9e9a6a9ba9da81e48f3e /tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp
parentb5eb3d69b40c4b750a1bbece7be2acbe7cf918e3 (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.cpp128
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"