summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gui/kernel/qwindow.cpp9
-rw-r--r--src/gui/kernel/qwindow.h2
-rw-r--r--tests/auto/gui/kernel/qwindow/tst_qwindow.cpp82
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);