From 496c977b43b131c6bf315cc030c21023b60e2661 Mon Sep 17 00:00:00 2001 From: Volker Hilsheimer Date: Mon, 16 Nov 2020 12:30:59 +0100 Subject: Allow cloning of event objects We have use cases for cloning of events, e.g. in the state machine and for event propagation. Provide the means to do so through a virtual method. Adapt QFutureCallOutEvent::clone, which is now an override. No code seems to be using that method. Change-Id: I6864d6597f6de800343c4dc458a7994e84dc6fb4 Reviewed-by: Shawn Rutledge --- src/corelib/kernel/qcoreevent.cpp | 5 +++++ src/corelib/kernel/qcoreevent.h | 10 ++++++++++ 2 files changed, 15 insertions(+) (limited to 'src/corelib/kernel') diff --git a/src/corelib/kernel/qcoreevent.cpp b/src/corelib/kernel/qcoreevent.cpp index 5fbc0cbb01..1bafb85c93 100644 --- a/src/corelib/kernel/qcoreevent.cpp +++ b/src/corelib/kernel/qcoreevent.cpp @@ -353,6 +353,11 @@ QEvent::~QEvent() QCoreApplicationPrivate::removePostedEvent(this); } +/*! + Creates and returns an identical copy of this event. +*/ +QEvent *QEvent::clone() const +{ return new QEvent(*this); } /*! \property QEvent::accepted diff --git a/src/corelib/kernel/qcoreevent.h b/src/corelib/kernel/qcoreevent.h index edd67b79d3..23503dee05 100644 --- a/src/corelib/kernel/qcoreevent.h +++ b/src/corelib/kernel/qcoreevent.h @@ -313,6 +313,8 @@ public: static int registerEventType(int hint = -1) noexcept; + virtual QEvent *clone() const; + protected: struct InputEventTag { explicit InputEventTag() = default; }; QEvent(Type type, InputEventTag) : QEvent(type) { m_inputEvent = true; } @@ -362,6 +364,8 @@ public: ~QTimerEvent(); int timerId() const { return id; } + QEvent *clone() const override { return new QTimerEvent(*this); }; + protected: int id; }; @@ -378,6 +382,8 @@ public: bool polished() const { return type() == ChildPolished; } bool removed() const { return type() == ChildRemoved; } + QEvent *clone() const override { return new QChildEvent(*this); }; + protected: QObject *c; }; @@ -390,6 +396,8 @@ public: inline QByteArray propertyName() const { return n; } + QEvent *clone() const override { return new QDynamicPropertyChangeEvent(*this); }; + private: QByteArray n; }; @@ -401,6 +409,8 @@ public: ~QDeferredDeleteEvent(); int loopLevel() const { return level; } + QEvent *clone() const override { return new QDeferredDeleteEvent(*this); }; + private: int level; friend class QCoreApplication; -- cgit v1.2.3