diff --git a/src/corelib/kernel/qcoreevent.cpp b/src/corelib/kernel/qcoreevent.cpp index fbea252bc0..6fdc2a94af 100644 --- a/src/corelib/kernel/qcoreevent.cpp +++ b/src/corelib/kernel/qcoreevent.cpp @@ -375,6 +375,10 @@ QEvent::~QEvent() For convenience, the accept flag can also be set with accept(), and cleared with ignore(). + + \note Accepting a QPointerEvent implicitly + \l {QEventPoint::setAccepted()}{accepts} all the + \l {QPointerEvent::points()}{points} that the event carries. */ /*! diff --git a/src/corelib/kernel/qcoreevent.h b/src/corelib/kernel/qcoreevent.h index 0458719f40..721342a66d 100644 --- a/src/corelib/kernel/qcoreevent.h +++ b/src/corelib/kernel/qcoreevent.h @@ -300,7 +300,7 @@ public: inline Type type() const { return static_cast(t); } inline bool spontaneous() const { return spont; } - inline void setAccepted(bool accepted) { m_accept = accepted; } + inline virtual void setAccepted(bool accepted) { m_accept = accepted; } inline bool isAccepted() const { return m_accept; } inline void accept() { m_accept = true; } diff --git a/src/gui/kernel/qevent.cpp b/src/gui/kernel/qevent.cpp index 51100f56ff..5938942399 100644 --- a/src/gui/kernel/qevent.cpp +++ b/src/gui/kernel/qevent.cpp @@ -683,6 +683,16 @@ bool QPointerEvent::allPointsAccepted() const return true; } +/*! + \reimp +*/ +void QPointerEvent::setAccepted(bool accepted) +{ + QEvent::setAccepted(accepted); + for (auto &p : m_points) + p.setAccepted(accepted); +} + /*! Returns the source device from which this event originates. diff --git a/src/gui/kernel/qevent.h b/src/gui/kernel/qevent.h index 07d5be51c6..fe728bc40c 100644 --- a/src/gui/kernel/qevent.h +++ b/src/gui/kernel/qevent.h @@ -220,6 +220,7 @@ public: virtual bool isUpdateEvent() const { return false; } virtual bool isEndEvent() const { return false; } bool allPointsAccepted() const; + virtual void setAccepted(bool accepted) override; QObject *exclusiveGrabber(const QEventPoint &point) const; void setExclusiveGrabber(const QEventPoint &point, QObject *exclusiveGrabber); QList> passiveGrabbers(const QEventPoint &point) const; diff --git a/tests/auto/gui/kernel/qtouchevent/tst_qtouchevent.cpp b/tests/auto/gui/kernel/qtouchevent/tst_qtouchevent.cpp index 8d07718156..3f87c21f51 100644 --- a/tests/auto/gui/kernel/qtouchevent/tst_qtouchevent.cpp +++ b/tests/auto/gui/kernel/qtouchevent/tst_qtouchevent.cpp @@ -442,6 +442,7 @@ void tst_QTouchEvent::touchEventAcceptedByDefault() touchEvent.ignore(); QVERIFY(QApplication::sendEvent(&touchWidget, &touchEvent)); QVERIFY(touchEvent.isAccepted()); + QVERIFY(touchEvent.allPointsAccepted()); } // QGraphicsView @@ -470,6 +471,7 @@ void tst_QTouchEvent::touchEventAcceptedByDefault() (QList() << touchPoint)); QVERIFY(QApplication::sendEvent(view.viewport(), &touchEvent)); QVERIFY(touchEvent.isAccepted()); + QVERIFY(touchEvent.allPointsAccepted()); QVERIFY(item.seenTouchBegin); } } @@ -496,6 +498,7 @@ void tst_QTouchEvent::touchBeginPropagatesWhenIgnored() touchPoints); QVERIFY(QApplication::sendEvent(&grandchild, &touchEvent)); QVERIFY(touchEvent.isAccepted()); + QVERIFY(touchEvent.allPointsAccepted()); QVERIFY(grandchild.seenTouchBegin); QVERIFY(child.seenTouchBegin); QVERIFY(!window.seenTouchBegin); @@ -510,6 +513,7 @@ void tst_QTouchEvent::touchBeginPropagatesWhenIgnored() touchEvent.ignore(); QVERIFY(QApplication::sendEvent(&grandchild, &touchEvent)); QVERIFY(touchEvent.isAccepted()); + QVERIFY(touchEvent.allPointsAccepted()); QVERIFY(!grandchild.seenTouchBegin); QVERIFY(child.seenTouchBegin); QVERIFY(!window.seenTouchBegin); @@ -544,6 +548,7 @@ void tst_QTouchEvent::touchBeginPropagatesWhenIgnored() (QList() << touchPoint)); QVERIFY(QApplication::sendEvent(view.viewport(), &touchEvent)); QVERIFY(touchEvent.isAccepted()); + QVERIFY(touchEvent.allPointsAccepted()); QVERIFY(grandchild.seenTouchBegin); QVERIFY(child.seenTouchBegin); QVERIFY(!root.seenTouchBegin); @@ -578,6 +583,7 @@ void tst_QTouchEvent::touchBeginPropagatesWhenIgnored() (QList() << touchPoint)); QVERIFY(QApplication::sendEvent(view.viewport(), &touchEvent)); QVERIFY(touchEvent.isAccepted()); + QVERIFY(touchEvent.allPointsAccepted()); QVERIFY(!grandchild.seenTouchBegin); QVERIFY(child.seenTouchBegin); QVERIFY(!root.seenTouchBegin); @@ -604,6 +610,7 @@ void tst_QTouchEvent::touchUpdateAndEndNeverPropagate() touchPoints); QVERIFY(QApplication::sendEvent(&child, &touchBeginEvent)); QVERIFY(touchBeginEvent.isAccepted()); + QVERIFY(touchBeginEvent.allPointsAccepted()); QVERIFY(child.seenTouchBegin); QVERIFY(!window.seenTouchBegin); @@ -614,6 +621,7 @@ void tst_QTouchEvent::touchUpdateAndEndNeverPropagate() touchPoints); QVERIFY(QApplication::sendEvent(&child, &touchUpdateEvent)); QVERIFY(!touchUpdateEvent.isAccepted()); + QVERIFY(!touchBeginEvent.allPointsAccepted()); QVERIFY(child.seenTouchUpdate); QVERIFY(!window.seenTouchUpdate); @@ -624,6 +632,7 @@ void tst_QTouchEvent::touchUpdateAndEndNeverPropagate() touchPoints); QVERIFY(QApplication::sendEvent(&child, &touchEndEvent)); QVERIFY(!touchEndEvent.isAccepted()); + QVERIFY(!touchBeginEvent.allPointsAccepted()); QVERIFY(child.seenTouchEnd); QVERIFY(!window.seenTouchEnd); } @@ -657,6 +666,7 @@ void tst_QTouchEvent::touchUpdateAndEndNeverPropagate() (QList() << touchPoint)); QVERIFY(QApplication::sendEvent(view.viewport(), &touchBeginEvent)); QVERIFY(touchBeginEvent.isAccepted()); + QVERIFY(touchBeginEvent.allPointsAccepted()); QVERIFY(child.seenTouchBegin); QVERIFY(!root.seenTouchBegin);