From 428e671cb6f24b951b33519574f8701c01c2e3a1 Mon Sep 17 00:00:00 2001 From: Adam Endrodi Date: Thu, 4 Nov 2010 17:48:31 +0200 Subject: don't reimplement deleteLater() It's not a virtual method, so calling it on a non-MCompositorWindow-typed variable wouldn't do what is meant. * src/mcompositewindow.cpp (MCompositeWindow::event): Catch the QEvent::DeferredDelete instead and re-post it if the window shouldn't be deleted yet. --- src/mcompositewindow.cpp | 11 +++++++---- src/mcompositewindow.h | 6 ++---- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/mcompositewindow.cpp b/src/mcompositewindow.cpp index 06f21ba..78bbab3 100644 --- a/src/mcompositewindow.cpp +++ b/src/mcompositewindow.cpp @@ -423,11 +423,14 @@ void MCompositeWindow::closeWindow() iconify(fadeRect, defer); } -void MCompositeWindow::deleteLater() +bool MCompositeWindow::event(QEvent *e) { - destroyed = true; - if (!is_transitioning) - QObject::deleteLater(); + if (e->type() == QEvent::DeferredDelete && is_transitioning) { + // Can't delete the object yet, try again in the next iteration. + deleteLater(); + return true; + } else + return QObject::event(e); } void MCompositeWindow::prettyDestroy() diff --git a/src/mcompositewindow.h b/src/mcompositewindow.h index b82dfc6..cc53cd7 100644 --- a/src/mcompositewindow.h +++ b/src/mcompositewindow.h @@ -72,10 +72,8 @@ public: Qt::HANDLE window() const { return win_id; } - /*! - * Overriden QObject::deleteLater() - */ - void deleteLater(); + // Reimplemented to defer deleteLater()s until transitions are over. + virtual bool event(QEvent *); /*! * Saves the global state of this item. Possibly transformations and -- cgit v1.2.3