diff options
-rw-r--r-- | src/gui/kernel/qwindow.cpp | 9 | ||||
-rw-r--r-- | src/gui/kernel/qwindow.h | 2 | ||||
-rw-r--r-- | tests/auto/gui/kernel/qwindow/tst_qwindow.cpp | 82 |
3 files changed, 93 insertions, 0 deletions
diff --git a/src/gui/kernel/qwindow.cpp b/src/gui/kernel/qwindow.cpp index 55329f56bd..d4f5e1dcf2 100644 --- a/src/gui/kernel/qwindow.cpp +++ b/src/gui/kernel/qwindow.cpp @@ -813,6 +813,12 @@ bool QWindow::event(QEvent *event) mouseDoubleClickEvent(static_cast<QMouseEvent*>(event)); break; + case QEvent::TouchBegin: + case QEvent::TouchUpdate: + case QEvent::TouchEnd: + touchEvent(static_cast<QTouchEvent *>(event)); + break; + case QEvent::Move: moveEvent(static_cast<QMoveEvent*>(event)); break; @@ -907,6 +913,9 @@ void QWindow::wheelEvent(QWheelEvent *) } #endif //QT_NO_WHEELEVENT +void QWindow::touchEvent(QTouchEvent *) +{ +} /*! diff --git a/src/gui/kernel/qwindow.h b/src/gui/kernel/qwindow.h index 11ff6b101d..2a50248c8f 100644 --- a/src/gui/kernel/qwindow.h +++ b/src/gui/kernel/qwindow.h @@ -72,6 +72,7 @@ class QMouseEvent; #ifndef QT_NO_WHEELEVENT class QWheelEvent; #endif +class QTouchEvent; class QPlatformSurface; class QPlatformWindow; @@ -285,6 +286,7 @@ protected: #ifndef QT_NO_WHEELEVENT virtual void wheelEvent(QWheelEvent *); #endif + virtual void touchEvent(QTouchEvent *); QWindow(QWindowPrivate &dd, QWindow *parent); diff --git a/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp b/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp index 4171f0f797..13b196c039 100644 --- a/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp +++ b/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp @@ -43,6 +43,8 @@ #include <QtTest/QtTest> +#include <QEvent> + class tst_QWindow: public QObject { Q_OBJECT @@ -51,6 +53,7 @@ private slots: void mapGlobal(); void positioning(); void isActive(); + void testInputEvents(); }; @@ -221,5 +224,84 @@ void tst_QWindow::isActive() QVERIFY(child.isActive()); } +class InputTestWindow : public QWindow +{ +public: + void keyPressEvent(QKeyEvent *event) { + keyPressCode = event->key(); + } + void keyReleaseEvent(QKeyEvent *event) { + keyReleaseCode = event->key(); + } + void mousePressEvent(QMouseEvent *event) { + mousePressButton = event->button(); + } + void mouseReleaseEvent(QMouseEvent *event) { + mouseReleaseButton = event->button(); + } + void touchEvent(QTouchEvent *event) { + QList<QTouchEvent::TouchPoint> points = event->touchPoints(); + for (int i = 0; i < points.count(); ++i) { + switch (points.at(i).state()) { + case Qt::TouchPointPressed: + ++touchPressedCount; + break; + case Qt::TouchPointReleased: + ++touchReleasedCount; + break; + } + } + } + + InputTestWindow() { + keyPressCode = keyReleaseCode = 0; + mousePressButton = mouseReleaseButton = 0; + touchPressedCount = touchReleasedCount = 0; + } + + int keyPressCode, keyReleaseCode; + int mousePressButton, mouseReleaseButton; + int touchPressedCount, touchReleasedCount; +}; + +void tst_QWindow::testInputEvents() +{ + InputTestWindow window; + window.setGeometry(80, 80, 40, 40); + window.show(); + QTest::qWaitForWindowShown(&window); + + QWindowSystemInterface::handleKeyEvent(&window, QEvent::KeyPress, Qt::Key_A, Qt::NoModifier); + QWindowSystemInterface::handleKeyEvent(&window, QEvent::KeyRelease, Qt::Key_A, Qt::NoModifier); + QCoreApplication::processEvents(); + QCOMPARE(window.keyPressCode, int(Qt::Key_A)); + QCOMPARE(window.keyReleaseCode, int(Qt::Key_A)); + + QPointF local(12, 34); + QWindowSystemInterface::handleMouseEvent(&window, local, local, Qt::LeftButton); + QWindowSystemInterface::handleMouseEvent(&window, local, local, Qt::NoButton); + QCoreApplication::processEvents(); + QCOMPARE(window.mousePressButton, int(Qt::LeftButton)); + QCOMPARE(window.mouseReleaseButton, int(Qt::LeftButton)); + + QTouchDevice *device = new QTouchDevice; + device->setType(QTouchDevice::TouchScreen); + QWindowSystemInterface::registerTouchDevice(device); + QList<QWindowSystemInterface::TouchPoint> points; + QWindowSystemInterface::TouchPoint tp1, tp2; + tp1.id = 1; + tp1.state = Qt::TouchPointPressed; + tp2.id = 2; + tp2.state = Qt::TouchPointPressed; + points << tp1 << tp2; + QWindowSystemInterface::handleTouchEvent(&window, device, points); + points[0].state = Qt::TouchPointReleased; + points[1].state = Qt::TouchPointReleased; + QWindowSystemInterface::handleTouchEvent(&window, device, points); + QCoreApplication::processEvents(); + QCOMPARE(window.touchPressedCount, 2); + QCOMPARE(window.touchReleasedCount, 2); +} + #include <tst_qwindow.moc> QTEST_MAIN(tst_QWindow); |