diff options
author | Andras Becsi <andras.becsi@nokia.com> | 2012-01-23 17:38:25 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-01-24 05:49:48 +0100 |
commit | 1ea7442ec3a3560697c178c5b37ac428e95560f6 (patch) | |
tree | 0c0d7721550e7aca77244efc6b99d03db73160b9 /tests/auto/qtquick2/qquickitem | |
parent | 39f4b17c18b55bb2abe2be8e39bff8d8cf8f3b10 (diff) |
QQuickCanvas::event should return true if the touch event was accepted
If QQuickCanvas::event delivers a touch event and it is accepted
the control ends up in QWindow::event which invalidates the event.
These touch events end up as if they were unhadled which causes Qt to
automatically synthesize mouse events even for accepted touch events.
Add a unit test for testing this behavior.
Change-Id: I83d4aeafee1ea7ec5d219e4b45aae699188717c3
Reviewed-by: Zeno Albisser <zeno.albisser@nokia.com>
Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
Diffstat (limited to 'tests/auto/qtquick2/qquickitem')
-rw-r--r-- | tests/auto/qtquick2/qquickitem/tst_qquickitem.cpp | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/tests/auto/qtquick2/qquickitem/tst_qquickitem.cpp b/tests/auto/qtquick2/qquickitem/tst_qquickitem.cpp index a3c64297ab..dccf055ae8 100644 --- a/tests/auto/qtquick2/qquickitem/tst_qquickitem.cpp +++ b/tests/auto/qtquick2/qquickitem/tst_qquickitem.cpp @@ -66,9 +66,23 @@ protected: virtual void focusOutEvent(QFocusEvent *) { Q_ASSERT(focused); focused = false; } virtual void mousePressEvent(QMouseEvent *event) { event->accept(); ++pressCount; } virtual void mouseReleaseEvent(QMouseEvent *event) { event->accept(); ++releaseCount; } + virtual void touchEvent(QTouchEvent *event) { event->accept(); } virtual void wheelEvent(QWheelEvent *event) { event->accept(); ++wheelCount; } }; +class TestCanvas: public QQuickCanvas +{ +public: + TestCanvas() + : QQuickCanvas() + {} + + virtual bool event(QEvent *event) + { + return QQuickCanvas::event(event); + } +}; + class TestPolishItem : public QQuickItem { Q_OBJECT @@ -124,6 +138,7 @@ private slots: void enabled(); void mouseGrab(); + void touchEventAccept(); void polishOutsideAnimation(); void polishOnCompleted(); @@ -862,6 +877,31 @@ void tst_qquickitem::mouseGrab() delete canvas; } +void tst_qquickitem::touchEventAccept() +{ + TestCanvas *canvas = new TestCanvas; + canvas->resize(100, 100); + canvas->show(); + + TestItem *item = new TestItem; + item->setSize(QSizeF(100, 100)); + item->setParentItem(canvas->rootItem()); + + static QTouchDevice* device = new QTouchDevice; + device->setType(QTouchDevice::TouchScreen); + QWindowSystemInterface::registerTouchDevice(device); + + QTouchEvent *event = new QTouchEvent(QEvent::TouchBegin, device); + + bool accepted = canvas->event(event); + + QVERIFY(accepted && event->isAccepted()); + + delete event; + delete item; + delete canvas; +} + void tst_qquickitem::polishOutsideAnimation() { QQuickCanvas *canvas = new QQuickCanvas; |