summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/corelib/kernel/qcoreevent.cpp41
-rw-r--r--src/corelib/kernel/qcoreevent.h2
2 files changed, 43 insertions, 0 deletions
diff --git a/src/corelib/kernel/qcoreevent.cpp b/src/corelib/kernel/qcoreevent.cpp
index 45b2293112..ab015a4b09 100644
--- a/src/corelib/kernel/qcoreevent.cpp
+++ b/src/corelib/kernel/qcoreevent.cpp
@@ -284,6 +284,45 @@ QEvent::QEvent(Type type)
{}
/*!
+ \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(const QEvent &other)
+ : d(other.d), t(other.t), posted(other.posted), spont(other.spont),
+ m_accept(other.m_accept)
+{
+ if (t != QEvent::DeferredDelete) {
+ // if QEventPrivate becomes available, make sure to implement a
+ // virtual QEventPrivate *clone() const; function so we can copy here
+ Q_ASSERT_X(!d, "QEvent", "Impossible, this can't happen: QEventPrivate isn't defined anywhere");
+ }
+}
+
+/*!
+ \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)
+{
+ if (t != QEvent::DeferredDelete) {
+ // if QEventPrivate becomes available, make sure to implement a
+ // virtual QEventPrivate *clone() const; function so we can copy here
+ Q_ASSERT_X(!other.d, "QEvent", "Impossible, this can't happen: QEventPrivate isn't defined anywhere");
+ }
+ t = other.t;
+ posted = other.posted;
+ spont = other.spont;
+ m_accept = other.m_accept;
+ return *this;
+}
+
+/*!
Destroys the event. If it was \link
QCoreApplication::postEvent() posted \endlink,
it will be removed from the list of events to be posted.
@@ -293,6 +332,8 @@ QEvent::~QEvent()
{
if (posted && QCoreApplication::instance())
QCoreApplicationPrivate::removePostedEvent(this);
+ if (t != QEvent::DeferredDelete)
+ Q_ASSERT_X(!d, "QEvent", "Impossible, this can't happen: QEventPrivate isn't defined anywhere");
}
diff --git a/src/corelib/kernel/qcoreevent.h b/src/corelib/kernel/qcoreevent.h
index a833394bba..177fc26933 100644
--- a/src/corelib/kernel/qcoreevent.h
+++ b/src/corelib/kernel/qcoreevent.h
@@ -283,7 +283,9 @@ public:
};
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 spont; }