diff options
author | Albert Astals Cid <albert.astals.cid@kdab.com> | 2017-06-28 14:39:19 +0200 |
---|---|---|
committer | Shawn Rutledge <shawn.rutledge@qt.io> | 2017-08-30 11:55:30 +0000 |
commit | 4c46dce8fd9c9dddddd1d07f56396b3eabb2efc4 (patch) | |
tree | 4906c73b440d410f0f09aa85965a1f864be664cb /src/qmltest | |
parent | 457c5bcb148e8ff13141e086b905f47d8b9ae03c (diff) |
Make QtQuickTest::mouseEvent use QTest::mouseX
Fixes QQuickItem::isUnderMouse returning wrong information when
moving the mouse cursor with QtQuickTest::mouseX
Also changes TestCase.mouseDrag to actually resemble more what
real life does, i.e. send mouse moves with the same localPos
if the item has already moved and update tst_drag.qml accordingly
Change-Id: I80e4ab097da90d21ba987466c1b82467755a6b56
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Diffstat (limited to 'src/qmltest')
-rw-r--r-- | src/qmltest/quicktestevent.cpp | 40 |
1 files changed, 17 insertions, 23 deletions
diff --git a/src/qmltest/quicktestevent.cpp b/src/qmltest/quicktestevent.cpp index dc7b917bc4..21c467ed1f 100644 --- a/src/qmltest/quicktestevent.cpp +++ b/src/qmltest/quicktestevent.cpp @@ -39,6 +39,7 @@ #include "quicktestevent_p.h" #include <QtTest/qtestkeyboard.h> +#include <QtTest/qtestmouse.h> #include <QtQml/qqml.h> #include <QtQuick/qquickitem.h> #include <QtQuick/qquickwindow.h> @@ -125,8 +126,6 @@ namespace QtQuickTest { enum MouseAction { MousePress, MouseRelease, MouseClick, MouseDoubleClick, MouseMove, MouseDoubleClickSequence }; - int lastMouseTimestamp = 0; - static void mouseEvent(MouseAction action, QWindow *window, QObject *item, Qt::MouseButton button, Qt::KeyboardModifiers stateKey, const QPointF &_pos, int delay=-1) @@ -138,7 +137,7 @@ namespace QtQuickTest delay = QTest::defaultMouseDelay(); if (delay > 0) { QTest::qWait(delay); - lastMouseTimestamp += delay; + QTest::lastMouseTimestamp += delay; } if (action == MouseClick) { @@ -165,37 +164,32 @@ namespace QtQuickTest stateKey &= static_cast<unsigned int>(Qt::KeyboardModifierMask); - QMouseEvent me(QEvent::User, QPoint(), Qt::LeftButton, button, stateKey); + if (action == MouseDoubleClick) { + // the QWindow variant of QTest::mouseEvent doesn't have MouseDoubleClick as event + // its MouseDClick is actually like the MouseDoubleClickSequence here + QMouseEvent me(QEvent::MouseButtonDblClick, pos, window->mapToGlobal(pos), button, button, stateKey); + me.setTimestamp(++QTest::lastMouseTimestamp); + QSpontaneKeyEvent::setSpontaneous(&me); + if (!qApp->notify(window, &me)) { + QWARN("Mouse event \"MouseDoubleClick\" not accepted by receiving window"); + } + return; + } + switch (action) { case MousePress: - me = QMouseEvent(QEvent::MouseButtonPress, pos, window->mapToGlobal(pos), button, button, stateKey); - me.setTimestamp(++lastMouseTimestamp); + QTest::mousePress(window, button, stateKey, pos, /*delay*/ 0); break; case MouseRelease: - me = QMouseEvent(QEvent::MouseButtonRelease, pos, window->mapToGlobal(pos), button, 0, stateKey); - me.setTimestamp(++lastMouseTimestamp); - lastMouseTimestamp += 500; // avoid double clicks being generated - break; - case MouseDoubleClick: - me = QMouseEvent(QEvent::MouseButtonDblClick, pos, window->mapToGlobal(pos), button, button, stateKey); - me.setTimestamp(++lastMouseTimestamp); + QTest::mouseRelease(window, button, stateKey, pos, /*delay*/ 0); break; case MouseMove: - // with move event the button is NoButton, but 'buttons' holds the currently pressed buttons - me = QMouseEvent(QEvent::MouseMove, pos, window->mapToGlobal(pos), Qt::NoButton, button, stateKey); - me.setTimestamp(++lastMouseTimestamp); + QTest::mouseMove(window, pos, /*delay*/ 0); break; default: QTEST_ASSERT(false); } - QSpontaneKeyEvent::setSpontaneous(&me); - if (!qApp->notify(window, &me)) { - static const char *mouseActionNames[] = - { "MousePress", "MouseRelease", "MouseClick", "MouseDoubleClick", "MouseMove", "MouseDoubleClickSequence" }; - QString warning = QString::fromLatin1("Mouse event \"%1\" not accepted by receiving window"); - QWARN(warning.arg(QString::fromLatin1(mouseActionNames[static_cast<int>(action)])).toLatin1().data()); - } } #if QT_CONFIG(wheelevent) |