diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/corelib/kernel/qcoreevent.cpp | 41 | ||||
-rw-r--r-- | src/corelib/kernel/qcoreevent.h | 2 |
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; } |