diff --git a/src/corelib/kernel/qcoreevent.cpp b/src/corelib/kernel/qcoreevent.cpp index 45b2293112b..ab015a4b090 100644 --- a/src/corelib/kernel/qcoreevent.cpp +++ b/src/corelib/kernel/qcoreevent.cpp @@ -283,6 +283,45 @@ QEvent::QEvent(Type type) : d(0), t(type), posted(false), spont(false), m_accept(true) {} +/*! + \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, @@ -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 a833394bbae..177fc269337 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(t); } inline bool spontaneous() const { return spont; }