summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel
diff options
context:
space:
mode:
authorVolker Hilsheimer <volker.hilsheimer@qt.io>2020-11-16 15:21:40 +0100
committerVolker Hilsheimer <volker.hilsheimer@qt.io>2020-11-19 03:16:48 +0000
commit19f9b0d5f54379151eb71e98555b203ad6756276 (patch)
tree226f5dc2b77292146a0e42dba6fda6a807df7174 /src/corelib/kernel
parentc149fd232daa4c62b0c39d603fe660104ceb92b5 (diff)
Disable copying and assigning of QEvent
Polymorphic classes should not be copied. However, we do rely on event copying in our propagation logic. So, make the members protected, don't delete them, using a dedicated macro. This way, QMutable*Event classes can be used to make copies. Remove some last usage of copying of QInputMethod(Query)Events. Change-Id: Ia0a8ae4ca9de97dcd7788ca3c6ed930b6460c43a Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src/corelib/kernel')
-rw-r--r--src/corelib/kernel/qcoreevent.cpp4
-rw-r--r--src/corelib/kernel/qcoreevent.h12
2 files changed, 12 insertions, 4 deletions
diff --git a/src/corelib/kernel/qcoreevent.cpp b/src/corelib/kernel/qcoreevent.cpp
index 1bafb85c93..7491f8e539 100644
--- a/src/corelib/kernel/qcoreevent.cpp
+++ b/src/corelib/kernel/qcoreevent.cpp
@@ -302,10 +302,10 @@ QEvent::QEvent(Type type)
}
/*!
+ \fn QEvent::QEvent(const QEvent &other)
\internal
Copies the \a other event.
*/
-QEvent::QEvent(const QEvent &other) = default;
/*!
\internal
@@ -334,13 +334,13 @@ QEvent::QEvent(const QEvent &other) = default;
*/
/*!
+ \fn QEvent &QEvent::operator=(const QEvent &other)
\internal
Attempts to copy the \a other event.
Copying events is a bad idea, yet some Qt 4 code does it (notably,
QApplication and the state machine).
*/
-QEvent &QEvent::operator=(const QEvent &other) = default;
/*!
Destroys the event. If it was \l{QCoreApplication::postEvent()}{posted},
diff --git a/src/corelib/kernel/qcoreevent.h b/src/corelib/kernel/qcoreevent.h
index 23503dee05..f6417438b1 100644
--- a/src/corelib/kernel/qcoreevent.h
+++ b/src/corelib/kernel/qcoreevent.h
@@ -46,12 +46,18 @@
QT_BEGIN_NAMESPACE
+#define Q_EVENT_DISABLE_COPY(Class) \
+protected: \
+ Class(const Class &) = default; \
+ Class &operator=(const Class &other) = default
class QEventPrivate;
class Q_CORE_EXPORT QEvent // event base class
{
Q_GADGET
QDOC_PROPERTY(bool accepted READ isAccepted WRITE setAccepted)
+
+ Q_EVENT_DISABLE_COPY(QEvent);
public:
enum Type {
/*
@@ -295,9 +301,7 @@ public:
Q_ENUM(Type)
explicit QEvent(Type type);
- QEvent(const QEvent &other);
virtual ~QEvent();
- QEvent &operator=(const QEvent &other);
inline Type type() const { return static_cast<Type>(t); }
inline bool spontaneous() const { return m_spont; }
@@ -359,6 +363,7 @@ private:
class Q_CORE_EXPORT QTimerEvent : public QEvent
{
+ Q_EVENT_DISABLE_COPY(QTimerEvent);
public:
explicit QTimerEvent(int timerId);
~QTimerEvent();
@@ -374,6 +379,7 @@ class QObject;
class Q_CORE_EXPORT QChildEvent : public QEvent
{
+ Q_EVENT_DISABLE_COPY(QChildEvent);
public:
QChildEvent(Type type, QObject *child);
~QChildEvent();
@@ -390,6 +396,7 @@ protected:
class Q_CORE_EXPORT QDynamicPropertyChangeEvent : public QEvent
{
+ Q_EVENT_DISABLE_COPY(QDynamicPropertyChangeEvent);
public:
explicit QDynamicPropertyChangeEvent(const QByteArray &name);
~QDynamicPropertyChangeEvent();
@@ -404,6 +411,7 @@ private:
class Q_CORE_EXPORT QDeferredDeleteEvent : public QEvent
{
+ Q_EVENT_DISABLE_COPY(QDeferredDeleteEvent);
public:
explicit QDeferredDeleteEvent();
~QDeferredDeleteEvent();