diff options
author | Shawn Rutledge <shawn.rutledge@qt.io> | 2020-11-04 22:10:35 +0100 |
---|---|---|
committer | Shawn Rutledge <shawn.rutledge@qt.io> | 2020-11-07 06:24:38 +0100 |
commit | 9a1a15b42fb526ad4f80944afb7761bfff1b5c9d (patch) | |
tree | 058dd55dff01b3d6a429ff863132e33c05d019be /src/corelib/kernel | |
parent | bdec189ecbc2cabbfa803a571b49533f190f053d (diff) |
Introduce QEvent::isSinglePointEvent()
This makes high-level event dispatching easier: for example we often
need to cast an event to access getters like button() and buttons().
We can so far assume that any QPointerEvent that is not a QTouchEvent
is a QSinglePointEvent; but more explicit type-checking looks safer.
Implemented in a similar way as c7f727996909338c3689396160f3060480521846.
Change-Id: I980d759e2a7538b6b30fd3bdc3be0c351ec6c246
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Diffstat (limited to 'src/corelib/kernel')
-rw-r--r-- | src/corelib/kernel/qcoreevent.cpp | 22 | ||||
-rw-r--r-- | src/corelib/kernel/qcoreevent.h | 6 |
2 files changed, 25 insertions, 3 deletions
diff --git a/src/corelib/kernel/qcoreevent.cpp b/src/corelib/kernel/qcoreevent.cpp index 6fdc2a94af..af89524dc4 100644 --- a/src/corelib/kernel/qcoreevent.cpp +++ b/src/corelib/kernel/qcoreevent.cpp @@ -294,7 +294,8 @@ QT_BEGIN_NAMESPACE Contructs an event object of type \a type. */ QEvent::QEvent(Type type) - : d(nullptr), t(type), posted(false), spont(false), m_accept(true), m_inputEvent(false), m_pointerEvent(false) + : d(nullptr), t(type), posted(false), spont(false), m_accept(true), + m_inputEvent(false), m_pointerEvent(false), m_singlePointEvent(false) { Q_TRACE(QEvent_ctor, this, t); } @@ -305,7 +306,8 @@ QEvent::QEvent(Type type) */ QEvent::QEvent(const QEvent &other) : d(other.d), t(other.t), posted(other.posted), spont(other.spont), - m_accept(other.m_accept), m_inputEvent(other.m_inputEvent), m_pointerEvent(other.m_pointerEvent) + m_accept(other.m_accept), m_inputEvent(other.m_inputEvent), + m_pointerEvent(other.m_pointerEvent), m_singlePointEvent(other.m_singlePointEvent) { Q_TRACE(QEvent_ctor, this, t); // if QEventPrivate becomes available, make sure to implement a @@ -332,6 +334,15 @@ QEvent::QEvent(const QEvent &other) /*! \internal + \since 6.0 + \fn QEvent::QEvent(Type type, QEvent::SinglePointEventTag) + + Constructs an event object of type \a type, setting the singlePointEvent, + pointerEvent and inputEvent flags to \c true. +*/ + +/*! + \internal Attempts to copy the \a other event. Copying events is a bad idea, yet some Qt 4 code does it (notably, @@ -438,6 +449,13 @@ QEvent::~QEvent() subclasses. */ +/*! + \fn bool QEvent::isSinglePointEvent() const + \since 6.0 + + Returns \c true if the event object is a subclass of QSinglePointEvent. +*/ + namespace { template <size_t N> struct QBasicAtomicBitField { diff --git a/src/corelib/kernel/qcoreevent.h b/src/corelib/kernel/qcoreevent.h index b56d5ab401..32f2ba75c7 100644 --- a/src/corelib/kernel/qcoreevent.h +++ b/src/corelib/kernel/qcoreevent.h @@ -308,6 +308,7 @@ public: inline bool isInputEvent() const noexcept { return m_inputEvent; } inline bool isPointerEvent() const noexcept { return m_pointerEvent; } + inline bool isSinglePointEvent() const noexcept { return m_singlePointEvent; } static int registerEventType(int hint = -1) noexcept; @@ -316,6 +317,8 @@ protected: QEvent(Type type, InputEventTag) : QEvent(type) { m_inputEvent = true; } struct PointerEventTag { explicit PointerEventTag() = default; }; QEvent(Type type, PointerEventTag) : QEvent(type, InputEventTag{}) { m_pointerEvent = true; } + struct SinglePointEventTag { explicit SinglePointEventTag() = default; }; + QEvent(Type type, SinglePointEventTag) : QEvent(type, PointerEventTag{}) { m_singlePointEvent = true; } QEventPrivate *d; ushort t; @@ -325,7 +328,8 @@ private: ushort m_accept : 1; ushort m_inputEvent : 1; ushort m_pointerEvent : 1; - ushort reserved : 11; + ushort m_singlePointEvent : 1; + ushort reserved : 10; friend class QCoreApplication; friend class QCoreApplicationPrivate; |