diff options
-rw-r--r-- | src/quick/handlers/qquickhandlerpoint.cpp | 3 | ||||
-rw-r--r-- | src/quick/handlers/qquickhandlerpoint_p.h | 4 | ||||
-rw-r--r-- | tests/manual/pointer/singlePointHandlerProperties.qml | 3 |
3 files changed, 9 insertions, 1 deletions
diff --git a/src/quick/handlers/qquickhandlerpoint.cpp b/src/quick/handlers/qquickhandlerpoint.cpp index 1155d27afe..2e4602affa 100644 --- a/src/quick/handlers/qquickhandlerpoint.cpp +++ b/src/quick/handlers/qquickhandlerpoint.cpp @@ -83,6 +83,7 @@ void QQuickHandlerPoint::localize(QQuickItem *item) void QQuickHandlerPoint::reset() { m_id = 0; + m_device = QPointingDevice::primaryPointingDevice(); m_uniqueId = QPointingDeviceUniqueId(); m_position = QPointF(); m_scenePosition = QPointF(); @@ -100,6 +101,7 @@ void QQuickHandlerPoint::reset() void QQuickHandlerPoint::reset(const QQuickEventPoint *point) { m_id = point->pointId(); + m_device = point->pointerEvent()->device(); const QQuickPointerEvent *event = point->pointerEvent(); switch (point->state()) { case QQuickEventPoint::Pressed: @@ -166,6 +168,7 @@ void QQuickHandlerPoint::reset(const QVector<QQuickHandlerPoint> &points) ellipseDiameterSum += point.ellipseDiameters(); } m_id = 0; + m_device = nullptr; m_uniqueId = QPointingDeviceUniqueId(); // all points are required to be from the same event, so pressed buttons and modifiers should be the same m_pressedButtons = points.first().pressedButtons(); diff --git a/src/quick/handlers/qquickhandlerpoint_p.h b/src/quick/handlers/qquickhandlerpoint_p.h index 44fd830af2..6ba5e3bf28 100644 --- a/src/quick/handlers/qquickhandlerpoint_p.h +++ b/src/quick/handlers/qquickhandlerpoint_p.h @@ -73,6 +73,7 @@ class Q_QUICK_PRIVATE_EXPORT QQuickHandlerPoint { Q_PROPERTY(qreal rotation READ rotation) Q_PROPERTY(qreal pressure READ pressure) Q_PROPERTY(QSizeF ellipseDiameters READ ellipseDiameters) + Q_PROPERTY(QPointingDevice *device READ device) public: QQuickHandlerPoint(); @@ -90,6 +91,8 @@ public: qreal pressure() const { return m_pressure; } QSizeF ellipseDiameters() const { return m_ellipseDiameters; } QPointingDeviceUniqueId uniqueId() const { return m_uniqueId; } + // non-const only because of QML engine limitations (similar to QTBUG-61749) + QPointingDevice *device() const { return const_cast<QPointingDevice *>(m_device); } void localize(QQuickItem *item); void reset(); @@ -98,6 +101,7 @@ public: private: int m_id = 0; + const QPointingDevice *m_device = QPointingDevice::primaryPointingDevice(); QPointingDeviceUniqueId m_uniqueId; Qt::MouseButtons m_pressedButtons = Qt::NoButton; Qt::KeyboardModifiers m_pressedModifiers = Qt::NoModifier; diff --git a/tests/manual/pointer/singlePointHandlerProperties.qml b/tests/manual/pointer/singlePointHandlerProperties.qml index d5c35fff22..c2500770f0 100644 --- a/tests/manual/pointer/singlePointHandlerProperties.qml +++ b/tests/manual/pointer/singlePointHandlerProperties.qml @@ -69,7 +69,8 @@ Rectangle { implicitHeight: label.implicitHeight Text { id: label - text: 'id: ' + pointHandler.point.id.toString(16) + " uid: " + pointHandler.point.uniqueId.numericId + + text: 'seat: ' + pointHandler.point.device.seatName + '\ndevice: ' + pointHandler.point.device.name + + '\nid: ' + pointHandler.point.id.toString(16) + " uid: " + pointHandler.point.uniqueId.numericId + '\npos: (' + pointHandler.point.position.x.toFixed(2) + ', ' + pointHandler.point.position.y.toFixed(2) + ')' + '\nmodifiers: ' + pointHandler.point.modifiers.toString(16) } |