From 36af37c99c13244cac54313d38af183ef40133f5 Mon Sep 17 00:00:00 2001 From: Jan Arve Saether Date: Wed, 27 Sep 2017 00:03:48 +0200 Subject: Fix BIC issue with QNativeGestureEvent Problem was for 32 bit macOS, or if QT_COORD_TYPE was configured to be float. Change-Id: I0a3d3d305f2e8a0f9be7c40f4fef7eabf4643d05 Reviewed-by: Shawn Rutledge --- src/gui/kernel/qevent.cpp | 20 +++++++++++++++----- src/gui/kernel/qevent.h | 3 +-- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/gui/kernel/qevent.cpp b/src/gui/kernel/qevent.cpp index 55339cac8c..8f153fa2d3 100644 --- a/src/gui/kernel/qevent.cpp +++ b/src/gui/kernel/qevent.cpp @@ -2763,12 +2763,16 @@ Qt::MouseButtons QTabletEvent::buttons() const #if QT_DEPRECATED_SINCE(5, 10) QNativeGestureEvent::QNativeGestureEvent(Qt::NativeGestureType type, const QPointF &localPos, const QPointF &windowPos, const QPointF &screenPos, qreal realValue, ulong sequenceId, quint64 intValue) - : QInputEvent(QEvent::NativeGesture), mGestureType(type), mTouchDeviceId(255), + : QInputEvent(QEvent::NativeGesture), mGestureType(type), mLocalPos(localPos), mWindowPos(windowPos), mScreenPos(screenPos), mRealValue(realValue), mSequenceId(sequenceId), mIntValue(intValue) { } #endif +typedef QHash NativeGestureEventDataHash; +// ### Qt6: move this to a member in QNativeGestureEvent +Q_GLOBAL_STATIC(NativeGestureEventDataHash, g_nativeGestureEventDataHash) + /*! Constructs a native gesture event of type \a type originating from \a device. @@ -2779,13 +2783,19 @@ QNativeGestureEvent::QNativeGestureEvent(Qt::NativeGestureType type, const QPoin \a realValue is the \macos event parameter, \a sequenceId and \a intValue are the Windows event parameters. \since 5.10 */ -QNativeGestureEvent::QNativeGestureEvent(Qt::NativeGestureType type, const QTouchDevice *device, const QPointF &localPos, const QPointF &windowPos, +QNativeGestureEvent::QNativeGestureEvent(Qt::NativeGestureType type, const QTouchDevice *dev, const QPointF &localPos, const QPointF &windowPos, const QPointF &screenPos, qreal realValue, ulong sequenceId, quint64 intValue) : QInputEvent(QEvent::NativeGesture), mGestureType(type), - mTouchDeviceId(QTouchDevicePrivate::get(const_cast(device))->id), mLocalPos(localPos), mWindowPos(windowPos), mScreenPos(screenPos), mRealValue(realValue), mSequenceId(sequenceId), mIntValue(intValue) -{ } +{ + g_nativeGestureEventDataHash->insert(this, dev); +} + +QNativeGestureEvent::~QNativeGestureEvent() +{ + g_nativeGestureEventDataHash->remove(this); +} /*! \since 5.10 @@ -2795,7 +2805,7 @@ QNativeGestureEvent::QNativeGestureEvent(Qt::NativeGestureType type, const QTouc const QTouchDevice *QNativeGestureEvent::device() const { - return QTouchDevicePrivate::deviceById(mTouchDeviceId); + return g_nativeGestureEventDataHash->value(this); } /*! diff --git a/src/gui/kernel/qevent.h b/src/gui/kernel/qevent.h index a6f97a21dc..e6e7339b10 100644 --- a/src/gui/kernel/qevent.h +++ b/src/gui/kernel/qevent.h @@ -307,6 +307,7 @@ public: #endif QNativeGestureEvent(Qt::NativeGestureType type, const QTouchDevice *dev, const QPointF &localPos, const QPointF &windowPos, const QPointF &screenPos, qreal value, ulong sequenceId, quint64 intArgument); + ~QNativeGestureEvent(); Qt::NativeGestureType gestureType() const { return mGestureType; } qreal value() const { return mRealValue; } @@ -322,8 +323,6 @@ public: protected: Qt::NativeGestureType mGestureType; - quint8 mTouchDeviceId; // QTouchDevicePrivate::id - quint8 mReserved[3]; // if qreal == double clang will pad the QPointF below to a 8-byte boundary QPointF mLocalPos; QPointF mWindowPos; QPointF mScreenPos; -- cgit v1.2.3