summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel
diff options
context:
space:
mode:
authorShawn Rutledge <shawn.rutledge@qt.io>2020-11-04 22:10:35 +0100
committerShawn Rutledge <shawn.rutledge@qt.io>2020-11-07 06:24:38 +0100
commit9a1a15b42fb526ad4f80944afb7761bfff1b5c9d (patch)
tree058dd55dff01b3d6a429ff863132e33c05d019be /src/corelib/kernel
parentbdec189ecbc2cabbfa803a571b49533f190f053d (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.cpp22
-rw-r--r--src/corelib/kernel/qcoreevent.h6
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;