diff options
author | Shawn Rutledge <shawn.rutledge@qt.io> | 2020-08-21 13:34:52 +0200 |
---|---|---|
committer | Shawn Rutledge <shawn.rutledge@qt.io> | 2020-08-25 06:34:01 +0200 |
commit | c7f727996909338c3689396160f3060480521846 (patch) | |
tree | c8ec4dada74a6e1c3f5552a9e32bacde59bdba0d /src | |
parent | fb9ec8ad44decba7b2878370f3711b61614f035a (diff) |
Introduce QEvent::isPointerEvent()
This makes high-level event dispatching easier: for example in Qt Quick,
all pointer events should eventually be delivered to items in a similar way.
Implemented in a similar way as d1111632e29124531d5b4512e0492314caaae396.
Change-Id: I2f0c4914bab228162f3b932dda8a88051ec2a4d7
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/corelib/kernel/qcoreevent.cpp | 21 | ||||
-rw-r--r-- | src/corelib/kernel/qcoreevent.h | 6 | ||||
-rw-r--r-- | src/gui/kernel/qevent.cpp | 9 | ||||
-rw-r--r-- | src/gui/kernel/qevent.h | 2 |
4 files changed, 34 insertions, 4 deletions
diff --git a/src/corelib/kernel/qcoreevent.cpp b/src/corelib/kernel/qcoreevent.cpp index 34712be47a..418f40495c 100644 --- a/src/corelib/kernel/qcoreevent.cpp +++ b/src/corelib/kernel/qcoreevent.cpp @@ -295,7 +295,7 @@ 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) + : d(nullptr), t(type), posted(false), spont(false), m_accept(true), m_inputEvent(false), m_pointerEvent(false) { Q_TRACE(QEvent_ctor, this, t); } @@ -322,7 +322,16 @@ QEvent::QEvent(const QEvent &other) \since 6.0 \fn QEvent::QEvent(Type type, QEvent::InputEventTag) - Constructs an event object of type \a type, setting the inputEvent flag to true. + Constructs an event object of type \a type, setting the inputEvent flag to \c true. +*/ + +/*! + \internal + \since 6.0 + \fn QEvent::QEvent(Type type, QEvent::PointerEventTag) + + Constructs an event object of type \a type, setting the pointerEvent and + inputEvent flags to \c true. */ /*! @@ -423,6 +432,14 @@ QEvent::~QEvent() subclasses. */ +/*! + \fn bool QEvent::isPointerEvent() const + \since 6.0 + + Returns \c true if the event object is a QPointerEvent or one of its + subclasses. +*/ + namespace { template <size_t N> struct QBasicAtomicBitField { diff --git a/src/corelib/kernel/qcoreevent.h b/src/corelib/kernel/qcoreevent.h index 209ed25d6b..2ae42a3c01 100644 --- a/src/corelib/kernel/qcoreevent.h +++ b/src/corelib/kernel/qcoreevent.h @@ -308,12 +308,15 @@ public: inline void ignore() { m_accept = false; } inline bool isInputEvent() const noexcept { return m_inputEvent; } + inline bool isPointerEvent() const noexcept { return m_pointerEvent; } static int registerEventType(int hint = -1) noexcept; protected: struct InputEventTag { explicit InputEventTag() = default; }; QEvent(Type type, InputEventTag) : QEvent(type) { m_inputEvent = true; } + struct PointerEventTag { explicit PointerEventTag() = default; }; + QEvent(Type type, PointerEventTag) : QEvent(type, InputEventTag{}) { m_pointerEvent = true; } QEventPrivate *d; ushort t; @@ -322,7 +325,8 @@ private: ushort spont : 1; ushort m_accept : 1; ushort m_inputEvent : 1; - ushort reserved : 12; + ushort m_pointerEvent : 1; + ushort reserved : 11; friend class QCoreApplication; friend class QCoreApplicationPrivate; diff --git a/src/gui/kernel/qevent.cpp b/src/gui/kernel/qevent.cpp index 2414a0d951..ab60a74e1b 100644 --- a/src/gui/kernel/qevent.cpp +++ b/src/gui/kernel/qevent.cpp @@ -167,6 +167,13 @@ QInputEvent::QInputEvent(Type type, const QInputDevice *dev, Qt::KeyboardModifie /*! \internal */ +QInputEvent::QInputEvent(QEvent::Type type, QEvent::PointerEventTag, const QInputDevice *dev, Qt::KeyboardModifiers modifiers) + : QEvent(type, QEvent::PointerEventTag{}), m_dev(dev), m_modState(modifiers) +{} + +/*! + \internal +*/ QInputEvent::~QInputEvent() { } @@ -345,7 +352,7 @@ QPointF QEventPoint::lastNormalizedPos() const } QPointerEvent::QPointerEvent(QEvent::Type type, const QPointingDevice *dev, Qt::KeyboardModifiers modifiers) - : QInputEvent(type, dev, modifiers) + : QInputEvent(type, QEvent::PointerEventTag{}, dev, modifiers) { } diff --git a/src/gui/kernel/qevent.h b/src/gui/kernel/qevent.h index 86878bfb67..210f6f1571 100644 --- a/src/gui/kernel/qevent.h +++ b/src/gui/kernel/qevent.h @@ -82,6 +82,8 @@ public: inline void setTimestamp(ulong timestamp) { m_timeStamp = timestamp; } protected: + QInputEvent(Type type, PointerEventTag, const QInputDevice *m_dev, Qt::KeyboardModifiers modifiers = Qt::NoModifier); + const QInputDevice *m_dev = nullptr; Qt::KeyboardModifiers m_modState = Qt::NoModifier; ulong m_timeStamp = 0; |