summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Endrodi <ext-adam.endrodi@nokia.com>2010-11-04 17:48:31 +0200
committerAdam Endrodi <ext-adam.endrodi@nokia.com>2010-11-04 17:48:31 +0200
commit428e671cb6f24b951b33519574f8701c01c2e3a1 (patch)
tree8dc4dd86beb83a680ce7a728c08ed90bcd15bef4
parent658b1baedd51082cef57bf09d36c1a5aeb2b04ca (diff)
don't reimplement deleteLater()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.
-rw-r--r--src/mcompositewindow.cpp11
-rw-r--r--src/mcompositewindow.h6
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