diff options
-rw-r--r-- | src/quick/items/qquickcanvas.cpp | 6 | ||||
-rw-r--r-- | tests/auto/qtquick2/qquickcanvas/tst_qquickcanvas.cpp | 39 |
2 files changed, 44 insertions, 1 deletions
diff --git a/src/quick/items/qquickcanvas.cpp b/src/quick/items/qquickcanvas.cpp index 660d7df77e..a92e8398f2 100644 --- a/src/quick/items/qquickcanvas.cpp +++ b/src/quick/items/qquickcanvas.cpp @@ -835,7 +835,11 @@ bool QQuickCanvasPrivate::deliverMouseEvent(QMouseEvent *event) if (!mouseGrabberItem && event->type() == QEvent::MouseButtonPress && (event->button() & event->buttons()) == event->buttons()) { - return deliverInitialMousePressEvent(rootItem, event); + if (deliverInitialMousePressEvent(rootItem, event)) + event->accept(); + else + event->ignore(); + return event->isAccepted(); } if (mouseGrabberItem) { diff --git a/tests/auto/qtquick2/qquickcanvas/tst_qquickcanvas.cpp b/tests/auto/qtquick2/qquickcanvas/tst_qquickcanvas.cpp index 795580cc6e..4a238429bb 100644 --- a/tests/auto/qtquick2/qquickcanvas/tst_qquickcanvas.cpp +++ b/tests/auto/qtquick2/qquickcanvas/tst_qquickcanvas.cpp @@ -210,6 +210,8 @@ private slots: void focusObject(); + void ignoreUnhandledMouseEvents(); + private: QTouchDevice *touchDevice; }; @@ -696,6 +698,43 @@ void tst_qquickcanvas::focusObject() delete canvas; } +void tst_qquickcanvas::ignoreUnhandledMouseEvents() +{ + QQuickCanvas* canvas = new QQuickCanvas; + canvas->resize(100, 100); + canvas->show(); + + QQuickItem* item = new QQuickItem; + item->setSize(QSizeF(100, 100)); + item->setParentItem(canvas->rootItem()); + + { + QMouseEvent me(QEvent::MouseButtonPress, QPointF(50, 50), Qt::LeftButton, Qt::LeftButton, + Qt::NoModifier); + me.setAccepted(true); + QVERIFY(QCoreApplication::sendEvent(canvas, &me)); + QVERIFY(!me.isAccepted()); + } + + { + QMouseEvent me(QEvent::MouseMove, QPointF(51, 51), Qt::LeftButton, Qt::LeftButton, + Qt::NoModifier); + me.setAccepted(true); + QVERIFY(QCoreApplication::sendEvent(canvas, &me)); + QVERIFY(!me.isAccepted()); + } + + { + QMouseEvent me(QEvent::MouseButtonRelease, QPointF(51, 51), Qt::LeftButton, Qt::LeftButton, + Qt::NoModifier); + me.setAccepted(true); + QVERIFY(QCoreApplication::sendEvent(canvas, &me)); + QVERIFY(!me.isAccepted()); + } + + delete canvas; +} + QTEST_MAIN(tst_qquickcanvas) #include "tst_qquickcanvas.moc" |