summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorShawn Rutledge <shawn.rutledge@qt.io>2020-08-21 13:34:52 +0200
committerShawn Rutledge <shawn.rutledge@qt.io>2020-08-25 06:34:01 +0200
commitc7f727996909338c3689396160f3060480521846 (patch)
treec8ec4dada74a6e1c3f5552a9e32bacde59bdba0d /src
parentfb9ec8ad44decba7b2878370f3711b61614f035a (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.cpp21
-rw-r--r--src/corelib/kernel/qcoreevent.h6
-rw-r--r--src/gui/kernel/qevent.cpp9
-rw-r--r--src/gui/kernel/qevent.h2
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;