@@ -16,6 +16,7 @@
1616
1717#include <QtTest>
1818#include <QQuickView>
19+#include <QStyleHints>
1920
2021#include "GestureTest.h"
2122
@@ -29,6 +30,8 @@ public:
2930private Q_SLOTS:
3031 void sendMouseEventIfTouchIgnored_data();
3132 void sendMouseEventIfTouchIgnored();
33+ void mouseDoubleClick_data();
34+ void mouseDoubleClick();
3235};
3336
3437tst_TouchDispatcher::tst_TouchDispatcher()
@@ -85,6 +88,62 @@ void tst_TouchDispatcher::sendMouseEventIfTouchIgnored()
8588 QCOMPARE(gotMousePressEvent, shouldGetMousePress);
8689}
8790
91+void tst_TouchDispatcher::mouseDoubleClick_data()
92+{
93+ QTest::addColumn<ulong>("timeBetweenClicks");
94+ QTest::addColumn<bool>("shouldSendDoubleClick");
95+
96+ QTest::newRow("double click") << static_cast<ulong>(qApp->styleHints()->mouseDoubleClickInterval() / 10) << true;
97+ QTest::newRow("two separate clicks") << static_cast<ulong>(qApp->styleHints()->mouseDoubleClickInterval() * 2) << false;
98+}
99+
100+void tst_TouchDispatcher::mouseDoubleClick()
101+{
102+ QFETCH(ulong, timeBetweenClicks);
103+ QFETCH(bool, shouldSendDoubleClick);
104+ DummyItem *dummyItem = new DummyItem(m_view->rootObject());
105+ dummyItem->setAcceptedMouseButtons(Qt::LeftButton);
106+
107+ TouchDispatcher touchDispatcher;
108+ touchDispatcher.setTargetItem(dummyItem);
109+
110+ bool gotDoubleClickEvent = false;
111+ dummyItem->mouseDoubleClickEventHandler = [&](QMouseEvent *event) {
112+ gotDoubleClickEvent = true;
113+ event->accept();
114+ };
115+
116+ dummyItem->touchEventHandler = [&](QTouchEvent *event) {
117+ event->ignore();
118+ };
119+
120+ ulong doubleClickInterval = static_cast<ulong>(qApp->styleHints()->mouseDoubleClickInterval());
121+
122+ QList<QTouchEvent::TouchPoint> touchPoints;
123+ {
124+ QTouchEvent::TouchPoint touchPoint;
125+ touchPoint.setId(0);
126+ touchPoint.setState(Qt::TouchPointPressed);
127+ touchPoints.append(touchPoint);
128+ }
129+ ulong timestamp = 12345;
130+
131+ touchDispatcher.dispatch(QEvent::TouchBegin, m_device, Qt::NoModifier, touchPoints, m_view, timestamp);
132+
133+ touchPoints[0].setState(Qt::TouchPointReleased);
134+ timestamp += doubleClickInterval / 10;
135+
136+ touchDispatcher.dispatch(QEvent::TouchEnd, m_device, Qt::NoModifier, touchPoints, m_view, timestamp);
137+
138+ touchPoints[0].setId(1);
139+ touchPoints[0].setState(Qt::TouchPointPressed);
140+ timestamp += timeBetweenClicks;
141+
142+ touchDispatcher.dispatch(QEvent::TouchBegin, m_device, Qt::NoModifier, touchPoints, m_view, timestamp);
143+
144+ QCOMPARE(gotDoubleClickEvent, shouldSendDoubleClick);
145+}
146+
88147QTEST_MAIN(tst_TouchDispatcher)
89148
90149#include "tst_TouchDispatcher.moc"