From 5ca5dfa89e05c6deda6cd9282cd505eb324228cd Mon Sep 17 00:00:00 2001 From: Shawn Rutledge Date: Wed, 15 Jul 2020 10:47:55 +0200 Subject: [PATCH] Set QEventPoint::state properly in QSinglePointEvent State was Unknown by default, and that is OK in widgets so far, because widgets pay attention to the event type, not QEventPoint::state(). But Qt Quick cares about that, because QEventPoint turns into QQuickEventPoint, in which state() has long been important, due to the semi-unified handling of mouse and touch events. If it was not a button that caused the event, state is Updated (the mouse is hovering or dragging, or it's an enter event, wheel event etc.) If more buttons are now held than before, state is Pressed. If fewer buttons are now held than before, state is Released. Amends 4e400369c08db251cd489fec1229398c224d02b4 Change-Id: I926d268982449e46e7ca713c4a6ee2014c28c645 Reviewed-by: Fabian Kosmale --- src/gui/kernel/qevent.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/gui/kernel/qevent.cpp b/src/gui/kernel/qevent.cpp index c77a6b23c6..0284dc2098 100644 --- a/src/gui/kernel/qevent.cpp +++ b/src/gui/kernel/qevent.cpp @@ -350,6 +350,12 @@ QSinglePointEvent::QSinglePointEvent(QEvent::Type type, const QPointingDevice *d m_reserved(0) { QMutableEventPoint &mut = QMutableEventPoint::from(m_point); + if (button == Qt::NoButton) + mut.setState(QEventPoint::State::Updated); // stationary only happens with touch events, not single-point events + else if ((button | buttons) == buttons) + mut.setState(QEventPoint::State::Pressed); + else + mut.setState(QEventPoint::State::Released); mut.setPosition(localPos); mut.setScenePosition(scenePos); mut.setGlobalPosition(globalPos);