tests/auto/qtouchevent/tst_qtouchevent.cpp
changeset 37 758a864f9613
parent 18 2f34d5167611
--- a/tests/auto/qtouchevent/tst_qtouchevent.cpp	Fri Sep 17 08:34:18 2010 +0300
+++ b/tests/auto/qtouchevent/tst_qtouchevent.cpp	Mon Oct 04 01:19:32 2010 +0300
@@ -109,6 +109,7 @@
 public:
     QList<QTouchEvent::TouchPoint> touchBeginPoints, touchUpdatePoints, touchEndPoints;
     bool seenTouchBegin, seenTouchUpdate, seenTouchEnd;
+    int touchBeginCounter, touchUpdateCounter, touchEndCounter;
     bool acceptTouchBegin, acceptTouchUpdate, acceptTouchEnd;
     bool deleteInTouchBegin, deleteInTouchUpdate, deleteInTouchEnd;
     tst_QTouchEventGraphicsItem **weakpointer;
@@ -131,6 +132,7 @@
         touchUpdatePoints.clear();
         touchEndPoints.clear();
         seenTouchBegin = seenTouchUpdate = seenTouchEnd = false;
+        touchBeginCounter = touchUpdateCounter = touchEndCounter = 0;
         acceptTouchBegin = acceptTouchUpdate = acceptTouchEnd = true;
         deleteInTouchBegin = deleteInTouchUpdate = deleteInTouchEnd = false;
     }
@@ -146,6 +148,7 @@
             if (seenTouchUpdate) qWarning("TouchBegin: TouchUpdate cannot happen before TouchBegin");
             if (seenTouchEnd) qWarning("TouchBegin: TouchEnd cannot happen before TouchBegin");
             seenTouchBegin = !seenTouchBegin && !seenTouchUpdate && !seenTouchEnd;
+            ++touchBeginCounter;
             touchBeginPoints = static_cast<QTouchEvent *>(event)->touchPoints();
             event->setAccepted(acceptTouchBegin);
             if (deleteInTouchBegin)
@@ -155,6 +158,7 @@
             if (!seenTouchBegin) qWarning("TouchUpdate: have not seen TouchBegin");
             if (seenTouchEnd) qWarning("TouchUpdate: TouchEnd cannot happen before TouchUpdate");
             seenTouchUpdate = seenTouchBegin && !seenTouchEnd;
+            ++touchUpdateCounter;
             touchUpdatePoints = static_cast<QTouchEvent *>(event)->touchPoints();
             event->setAccepted(acceptTouchUpdate);
             if (deleteInTouchUpdate)
@@ -164,6 +168,7 @@
             if (!seenTouchBegin) qWarning("TouchEnd: have not seen TouchBegin");
             if (seenTouchEnd) qWarning("TouchEnd: already seen a TouchEnd");
             seenTouchEnd = seenTouchBegin && !seenTouchEnd;
+            ++touchEndCounter;
             touchEndPoints = static_cast<QTouchEvent *>(event)->touchPoints();
             event->setAccepted(acceptTouchEnd);
             if (deleteInTouchEnd)
@@ -194,6 +199,7 @@
     void deleteInEventHandler();
     void deleteInRawEventTranslation();
     void crashInQGraphicsSceneAfterNotHandlingTouchBegin();
+    void touchBeginWithGraphicsWidget();
 };
 
 void tst_QTouchEvent::touchDisabledByDefault()
@@ -1334,6 +1340,59 @@
     QTest::touchEvent(view.viewport()).release(0, view.mapFromScene(QPoint(10, 10)));
 }
 
+void tst_QTouchEvent::touchBeginWithGraphicsWidget()
+{
+    QGraphicsScene scene;
+    QGraphicsView view(&scene);
+    tst_QTouchEventGraphicsItem *root;
+    root = new tst_QTouchEventGraphicsItem;
+    root->setAcceptTouchEvents(true);
+    scene.addItem(root);
+
+    QGraphicsWidget *glassWidget = new QGraphicsWidget;
+    glassWidget->setMinimumSize(100, 100);
+    scene.addItem(glassWidget);
+
+    view.resize(200, 200);
+    view.show();
+    QTest::qWaitForWindowShown(&view);
+    view.fitInView(scene.sceneRect());
+
+    QTest::touchEvent()
+            .press(0, view.mapFromScene(root->mapToScene(3,3)), view.viewport());
+    QTest::touchEvent()
+            .stationary(0)
+            .press(1, view.mapFromScene(root->mapToScene(6,6)), view.viewport());
+    QTest::touchEvent()
+            .release(0, view.mapFromScene(root->mapToScene(3,3)), view.viewport())
+            .release(1, view.mapFromScene(root->mapToScene(6,6)), view.viewport());
+
+    QCOMPARE(root->touchBeginCounter, 1);
+    QCOMPARE(root->touchUpdateCounter, 1);
+    QCOMPARE(root->touchEndCounter, 1);
+    QCOMPARE(root->touchUpdatePoints.size(), 2);
+
+    root->reset();
+    glassWidget->setWindowFlags(Qt::Window); // make the glassWidget a panel
+
+    QTest::touchEvent()
+            .press(0, view.mapFromScene(root->mapToScene(3,3)), view.viewport());
+    QTest::touchEvent()
+            .stationary(0)
+            .press(1, view.mapFromScene(root->mapToScene(6,6)), view.viewport());
+    QTest::touchEvent()
+            .release(0, view.mapFromScene(root->mapToScene(3,3)), view.viewport())
+            .release(1, view.mapFromScene(root->mapToScene(6,6)), view.viewport());
+
+    QCOMPARE(root->touchBeginCounter, 0);
+    QCOMPARE(root->touchUpdateCounter, 0);
+    QCOMPARE(root->touchEndCounter, 0);
+
+
+    delete root;
+    delete glassWidget;
+}
+
 QTEST_MAIN(tst_QTouchEvent)
 
 #include "tst_qtouchevent.moc"