summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel
diff options
context:
space:
mode:
authorVolker Hilsheimer <volker.hilsheimer@qt.io>2020-11-16 12:30:59 +0100
committerVolker Hilsheimer <volker.hilsheimer@qt.io>2020-11-17 06:21:05 +0100
commit496c977b43b131c6bf315cc030c21023b60e2661 (patch)
treedb381a102edf35b18ccc90ee2952c21212cbc224 /src/corelib/kernel
parent26866440823ffd0796755bc04eb3f298b73f3f16 (diff)
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 <shawn.rutledge@qt.io>
Diffstat (limited to 'src/corelib/kernel')
-rw-r--r--src/corelib/kernel/qcoreevent.cpp5
-rw-r--r--src/corelib/kernel/qcoreevent.h10
2 files changed, 15 insertions, 0 deletions
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;