aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@nokia.com>2012-01-30 17:04:42 +0100
committerQt by Nokia <qt-info@nokia.com>2012-02-02 08:16:43 +0100
commitba2b28fb849b80a0f2f8f4cffb6a774d0e6ff287 (patch)
tree6b73a5fa7af920dbfe5296ef2e91d6426217e008 /tests/auto
parentfd7fce388e31174a5179d92b56911d974bf11024 (diff)
Fix unhandled touch events not being ignored.
Unhandled touch events need to be ignored in order for things like mouse event synthetization in QtGui to work. Change-Id: I6fe9dad205c8bb8547d2424c2e2a3b3518598006 Reviewed-by: Andras Becsi <andras.becsi@nokia.com> Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/qtquick2/qquickitem/tst_qquickitem.cpp100
1 files changed, 89 insertions, 11 deletions
diff --git a/tests/auto/qtquick2/qquickitem/tst_qquickitem.cpp b/tests/auto/qtquick2/qquickitem/tst_qquickitem.cpp
index 099f29d925..5f90e895c2 100644
--- a/tests/auto/qtquick2/qquickitem/tst_qquickitem.cpp
+++ b/tests/auto/qtquick2/qquickitem/tst_qquickitem.cpp
@@ -55,18 +55,26 @@ class TestItem : public QQuickItem
{
Q_OBJECT
public:
- TestItem(QQuickItem *parent = 0) : QQuickItem(parent), focused(false), pressCount(0), releaseCount(0), wheelCount(0) {}
+ TestItem(QQuickItem *parent = 0)
+ : QQuickItem(parent), focused(false), pressCount(0), releaseCount(0)
+ , wheelCount(0), acceptIncomingTouchEvents(true)
+ , touchEventReached(false) {}
bool focused;
int pressCount;
int releaseCount;
int wheelCount;
+ bool acceptIncomingTouchEvents;
+ bool touchEventReached;
protected:
virtual void focusInEvent(QFocusEvent *) { Q_ASSERT(!focused); focused = true; }
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 touchEvent(QTouchEvent *event) {
+ touchEventReached = true;
+ event->setAccepted(acceptIncomingTouchEvents);
+ }
virtual void wheelEvent(QWheelEvent *event) { event->accept(); ++wheelCount; }
};
@@ -139,7 +147,8 @@ private slots:
void enabledFocus();
void mouseGrab();
- void touchEventAccept();
+ void touchEventAcceptIgnore_data();
+ void touchEventAcceptIgnore();
void polishOutsideAnimation();
void polishOnCompleted();
@@ -1016,8 +1025,18 @@ void tst_qquickitem::mouseGrab()
delete canvas;
}
-void tst_qquickitem::touchEventAccept()
+void tst_qquickitem::touchEventAcceptIgnore_data()
+{
+ QTest::addColumn<bool>("itemSupportsTouch");
+
+ QTest::newRow("with touch") << true;
+ QTest::newRow("without touch") << false;
+}
+
+void tst_qquickitem::touchEventAcceptIgnore()
{
+ QFETCH(bool, itemSupportsTouch);
+
TestCanvas *canvas = new TestCanvas;
canvas->resize(100, 100);
canvas->show();
@@ -1025,18 +1044,77 @@ void tst_qquickitem::touchEventAccept()
TestItem *item = new TestItem;
item->setSize(QSizeF(100, 100));
item->setParentItem(canvas->rootItem());
+ item->acceptIncomingTouchEvents = itemSupportsTouch;
- static QTouchDevice* device = new QTouchDevice;
- device->setType(QTouchDevice::TouchScreen);
- QWindowSystemInterface::registerTouchDevice(device);
+ static QTouchDevice* device = 0;
+ if (!device) {
+ device =new QTouchDevice;
+ device->setType(QTouchDevice::TouchScreen);
+ QWindowSystemInterface::registerTouchDevice(device);
+ }
+
+ // Send Begin, Update & End touch sequence
+ {
+ QTouchEvent::TouchPoint point;
+ point.setId(1);
+ point.setPos(QPointF(50, 50));
+ point.setScreenPos(point.pos());
+ point.setState(Qt::TouchPointPressed);
- QTouchEvent *event = new QTouchEvent(QEvent::TouchBegin, device);
+ QTouchEvent event(QEvent::TouchBegin, device,
+ Qt::NoModifier,
+ Qt::TouchPointPressed,
+ QList<QTouchEvent::TouchPoint>() << point);
+ event.setAccepted(true);
- bool accepted = canvas->event(event);
+ item->touchEventReached = false;
- QVERIFY(accepted && event->isAccepted());
+ bool accepted = canvas->event(&event);
+
+ QVERIFY(item->touchEventReached);
+ QCOMPARE(accepted && event.isAccepted(), itemSupportsTouch);
+ }
+ {
+ QTouchEvent::TouchPoint point;
+ point.setId(1);
+ point.setPos(QPointF(60, 60));
+ point.setScreenPos(point.pos());
+ point.setState(Qt::TouchPointMoved);
+
+ QTouchEvent event(QEvent::TouchUpdate, device,
+ Qt::NoModifier,
+ Qt::TouchPointMoved,
+ QList<QTouchEvent::TouchPoint>() << point);
+ event.setAccepted(true);
+
+ item->touchEventReached = false;
+
+ bool accepted = canvas->event(&event);
+
+ QCOMPARE(item->touchEventReached, itemSupportsTouch);
+ QCOMPARE(accepted && event.isAccepted(), itemSupportsTouch);
+ }
+ {
+ QTouchEvent::TouchPoint point;
+ point.setId(1);
+ point.setPos(QPointF(60, 60));
+ point.setScreenPos(point.pos());
+ point.setState(Qt::TouchPointReleased);
+
+ QTouchEvent event(QEvent::TouchEnd, device,
+ Qt::NoModifier,
+ Qt::TouchPointReleased,
+ QList<QTouchEvent::TouchPoint>() << point);
+ event.setAccepted(true);
+
+ item->touchEventReached = false;
+
+ bool accepted = canvas->event(&event);
+
+ QCOMPARE(item->touchEventReached, itemSupportsTouch);
+ QCOMPARE(accepted && event.isAccepted(), itemSupportsTouch);
+ }
- delete event;
delete item;
delete canvas;
}