diff options
Diffstat (limited to 'src/quick/items/qquickmousearea.cpp')
-rw-r--r-- | src/quick/items/qquickmousearea.cpp | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/src/quick/items/qquickmousearea.cpp b/src/quick/items/qquickmousearea.cpp index dc44deca38..a6edfc4754 100644 --- a/src/quick/items/qquickmousearea.cpp +++ b/src/quick/items/qquickmousearea.cpp @@ -19,7 +19,7 @@ QT_BEGIN_NAMESPACE -DEFINE_BOOL_CONFIG_OPTION(qmlVisualTouchDebugging, QML_VISUAL_TOUCH_DEBUGGING) +DEFINE_BOOL_CONFIG_OPTION(qmlMaVisualTouchDebugging, QML_VISUAL_TOUCH_DEBUGGING) Q_DECLARE_LOGGING_CATEGORY(lcHoverTrace) @@ -53,7 +53,7 @@ void QQuickMouseAreaPrivate::init() q->setAcceptedMouseButtons(Qt::LeftButton); q->setAcceptTouchEvents(false); // rely on mouse events synthesized from touch q->setFiltersChildMouseEvents(true); - if (qmlVisualTouchDebugging()) { + if (qmlMaVisualTouchDebugging()) { q->setFlag(QQuickItem::ItemHasContents); } } @@ -743,7 +743,9 @@ void QQuickMouseArea::mouseMoveEvent(QMouseEvent *event) QQuickMouseEvent &me = d->quickMouseEvent; me.reset(d->lastPos.x(), d->lastPos.y(), d->lastButton, d->lastButtons, d->lastModifiers, false, d->longPress, event->flags()); +#if QT_DEPRECATED_SINCE(6, 6) me.setSource(event->source()); +#endif emit mouseXChanged(&me); me.setPosition(d->lastPos); emit mouseYChanged(&me); @@ -788,13 +790,18 @@ void QQuickMouseArea::mouseDoubleClickEvent(QMouseEvent *event) QQuickMouseEvent &me = d->quickMouseEvent; me.reset(d->lastPos.x(), d->lastPos.y(), d->lastButton, d->lastButtons, d->lastModifiers, true, false, event->flags()); +#if QT_DEPRECATED_SINCE(6, 6) me.setSource(event->source()); +#endif me.setAccepted(d->isDoubleClickConnected()); emit this->doubleClicked(&me); if (!me.isAccepted()) d->propagate(&me, QQuickMouseAreaPrivate::DoubleClick); if (d->pressed) d->doubleClick = d->isDoubleClickConnected() || me.isAccepted(); + + // Do not call the base implementation: we don't want to call event->ignore(). + return; } QQuickItem::mouseDoubleClickEvent(event); } @@ -902,6 +909,7 @@ void QQuickMouseArea::ungrabMouse() emit pressedButtonsChanged(); if (d->hovered && !isUnderMouse()) { + qCDebug(lcHoverTrace) << "losing hover: not under the mouse"; d->hovered = false; emit hoveredChanged(); } @@ -966,6 +974,7 @@ bool QQuickMouseArea::sendMouseEvent(QMouseEvent *event) emit pressedChanged(); emit containsPressChanged(); if (d->hovered) { + qCDebug(lcHoverTrace) << "losing hover: button released"; d->hovered = false; emit hoveredChanged(); } @@ -1012,7 +1021,9 @@ void QQuickMouseArea::timerEvent(QTimerEvent *event) d->longPress = true; QQuickMouseEvent &me = d->quickMouseEvent; me.reset(d->lastPos.x(), d->lastPos.y(), d->lastButton, d->lastButtons, d->lastModifiers, false, d->longPress, d->lastFlags); +#if QT_DEPRECATED_SINCE(6, 6) me.setSource(Qt::MouseEventSynthesizedByQt); +#endif me.setAccepted(d->isPressAndHoldConnected()); emit pressAndHold(&me); if (!me.isAccepted()) @@ -1028,7 +1039,7 @@ void QQuickMouseArea::geometryChange(const QRectF &newGeometry, const QRectF &ol Q_D(QQuickMouseArea); QQuickItem::geometryChange(newGeometry, oldGeometry); - if (d->lastScenePos.isNull) + if (!d->lastScenePos.isValid()) d->lastScenePos = mapToScene(d->lastPos); else if (newGeometry.x() != oldGeometry.x() || newGeometry.y() != oldGeometry.y()) d->lastPos = mapFromScene(d->lastScenePos); @@ -1130,8 +1141,10 @@ void QQuickMouseArea::setHoverEnabled(bool h) \qmlproperty bool QtQuick::MouseArea::containsMouse This property holds whether the mouse is currently inside the mouse area. - \warning If hoverEnabled is false, containsMouse will only be valid + \warning If hoverEnabled is \c false, \c containsMouse will be \c true when the mouse is pressed while the mouse cursor is inside the MouseArea. + But if you set \c {mouse.accepted = false} in an \c onPressed handler, + \c containsMouse will remain \c false because the press was rejected. */ bool QQuickMouseArea::hovered() const { @@ -1229,7 +1242,9 @@ bool QQuickMouseArea::setPressed(Qt::MouseButton button, bool p, Qt::MouseEventS if (wasPressed != p) { QQuickMouseEvent &me = d->quickMouseEvent; me.reset(d->lastPos.x(), d->lastPos.y(), d->lastButton, d->lastButtons, d->lastModifiers, isclick, d->longPress, d->lastFlags); +#if QT_DEPRECATED_SINCE(6, 6) me.setSource(source); +#endif if (p) { d->pressed |= button; if (!d->doubleClick) @@ -1241,6 +1256,8 @@ bool QQuickMouseArea::setPressed(Qt::MouseButton button, bool p, Qt::MouseEventS if (!me.isAccepted()) { d->pressed = Qt::NoButton; + if (!hoverEnabled()) + setHovered(false); } if (!oldPressed) { @@ -1267,6 +1284,7 @@ bool QQuickMouseArea::setPressed(Qt::MouseButton button, bool p, Qt::MouseEventS return me.isAccepted(); } + Q_UNUSED(source) return false; } @@ -1438,7 +1456,7 @@ QSGNode *QQuickMouseArea::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData Q_UNUSED(data); Q_D(QQuickMouseArea); - if (!qmlVisualTouchDebugging()) + if (!qmlMaVisualTouchDebugging()) return nullptr; QSGInternalRectangleNode *rectangle = static_cast<QSGInternalRectangleNode *>(oldNode); |