diff options
-rw-r--r-- | src/quick/items/qquickevents.cpp | 9 | ||||
-rw-r--r-- | src/quick/items/qquickevents_p_p.h | 2 | ||||
-rw-r--r-- | src/quick/items/qquickwindow.cpp | 10 | ||||
-rw-r--r-- | src/quick/items/qquickwindow_p.h | 1 |
4 files changed, 19 insertions, 3 deletions
diff --git a/src/quick/items/qquickevents.cpp b/src/quick/items/qquickevents.cpp index bde271882c..830adc50b7 100644 --- a/src/quick/items/qquickevents.cpp +++ b/src/quick/items/qquickevents.cpp @@ -879,8 +879,9 @@ QQuickPointerEvent *QQuickPointerMouseEvent::reset(QEvent *event) Qt::TouchPointState state = Qt::TouchPointStationary; switch (ev->type()) { case QEvent::MouseButtonPress: - case QEvent::MouseButtonDblClick: m_mousePoint->clearPassiveGrabbers(); + Q_FALLTHROUGH(); + case QEvent::MouseButtonDblClick: state = Qt::TouchPointPressed; break; case QEvent::MouseButtonRelease: @@ -1055,6 +1056,12 @@ bool QQuickPointerMouseEvent::isPressEvent() const (me->buttons() & me->button()) == me->buttons()); } +bool QQuickPointerMouseEvent::isDoubleClickEvent() const +{ + auto me = static_cast<QMouseEvent*>(m_event); + return (me->type() == QEvent::MouseButtonDblClick); +} + bool QQuickPointerMouseEvent::isUpdateEvent() const { auto me = static_cast<QMouseEvent*>(m_event); diff --git a/src/quick/items/qquickevents_p_p.h b/src/quick/items/qquickevents_p_p.h index 9ab6ea9955..19b2a6221e 100644 --- a/src/quick/items/qquickevents_p_p.h +++ b/src/quick/items/qquickevents_p_p.h @@ -407,6 +407,7 @@ public: // helpers for C++ only (during event delivery) virtual void localize(QQuickItem *target) = 0; virtual bool isPressEvent() const = 0; + virtual bool isDoubleClickEvent() const { return false; } virtual bool isUpdateEvent() const = 0; virtual bool isReleaseEvent() const = 0; virtual QQuickPointerMouseEvent *asPointerMouseEvent() { return nullptr; } @@ -451,6 +452,7 @@ public: QQuickPointerEvent *reset(QEvent *) override; void localize(QQuickItem *target) override; bool isPressEvent() const override; + bool isDoubleClickEvent() const override; bool isUpdateEvent() const override; bool isReleaseEvent() const override; QQuickPointerMouseEvent *asPointerMouseEvent() override { return this; } diff --git a/src/quick/items/qquickwindow.cpp b/src/quick/items/qquickwindow.cpp index e4eed8454c..713df4c500 100644 --- a/src/quick/items/qquickwindow.cpp +++ b/src/quick/items/qquickwindow.cpp @@ -503,6 +503,7 @@ QQuickWindowPrivate::QQuickWindowPrivate() , lastWheelEventAccepted(false) , componentCompleted(true) , allowChildEventFiltering(true) + , allowDoubleClick(true) , lastFocusReason(Qt::OtherFocusReason) , renderTarget(0) , renderTargetId(0) @@ -2092,7 +2093,8 @@ void QQuickWindowPrivate::handleMouseEvent(QMouseEvent *event) case QEvent::MouseButtonDblClick: Q_QUICK_INPUT_PROFILE(QQuickProfiler::Mouse, QQuickProfiler::InputMouseDoubleClick, event->button(), event->buttons()); - deliverPointerEvent(pointerEventInstance(event)); + if (allowDoubleClick) + deliverPointerEvent(pointerEventInstance(event)); break; case QEvent::MouseMove: Q_QUICK_INPUT_PROFILE(QQuickProfiler::Mouse, QQuickProfiler::InputMouseMove, @@ -2404,7 +2406,11 @@ void QQuickWindowPrivate::deliverMatchingPointsToItem(QQuickItem *item, QQuickPo pointerEvent->localize(item); // Let the Item's handlers (if any) have the event first. - itemPrivate->handlePointerEvent(pointerEvent); + // However, double click should never be delivered to handlers. + if (!pointerEvent->isDoubleClickEvent()) { + itemPrivate->handlePointerEvent(pointerEvent); + allowDoubleClick = !(pointerEvent->asPointerMouseEvent() && pointerEvent->isPressEvent() && pointerEvent->allPointsAccepted()); + } if (handlersOnly) return; if (pointerEvent->allPointsAccepted() && !pointerEvent->isReleaseEvent()) diff --git a/src/quick/items/qquickwindow_p.h b/src/quick/items/qquickwindow_p.h index fa39eca9a6..a40301bcfa 100644 --- a/src/quick/items/qquickwindow_p.h +++ b/src/quick/items/qquickwindow_p.h @@ -262,6 +262,7 @@ public: bool componentCompleted : 1; bool allowChildEventFiltering : 1; + bool allowDoubleClick : 1; Qt::FocusReason lastFocusReason; |