diff options
author | Abdiel Janulgue <abdiel.janulgue@nokia.com> | 2010-08-18 18:55:39 +0300 |
---|---|---|
committer | Abdiel Janulgue <abdiel.janulgue@nokia.com> | 2010-08-18 18:55:39 +0300 |
commit | 932e865b31678f86bf67911b8595cacd8185d4cb (patch) | |
tree | 3ef2973f1c3393e6c8e70b0f1e201727c77f8028 /src/mcompositewindow.cpp | |
parent | af6f650c3cfd42a8cc3079984a3f1b90fb95e714 (diff) |
Fixes: NB#185979 - Managing separate child window causing mcompositor to crash
Details: Properly handle QObject deletion by removing all traces of the window object's
pointer. Causing rare crashes when event handler fires and some objects are still around
RevBy: TrustMe
Diffstat (limited to 'src/mcompositewindow.cpp')
-rw-r--r-- | src/mcompositewindow.cpp | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/src/mcompositewindow.cpp b/src/mcompositewindow.cpp index 2d1419a..6b3fd9e 100644 --- a/src/mcompositewindow.cpp +++ b/src/mcompositewindow.cpp @@ -108,6 +108,10 @@ MCompositeWindow::MCompositeWindow(Qt::HANDLE window, MCompositeWindow::~MCompositeWindow() { + MCompositeManager *p = (MCompositeManager *) qApp; + if (!p->d->removeWindow(window())) + qWarning("destroyEvent(): Error removing window"); + if (t_ping) { stopPing(); t_ping = 0; @@ -120,7 +124,6 @@ MCompositeWindow::~MCompositeWindow() anim = 0; if (pc) { - MCompositeManager *p = (MCompositeManager *) qApp; p->d->prop_caches.remove(window()); pc->deleteLater(); } @@ -297,7 +300,7 @@ void MCompositeWindow::q_fadeIn() void MCompositeWindow::closeWindow() { - if (!isAppWindow()) { + if (!isAppWindow() || propertyCache()->windowState() == IconicState) { setVisible(false); emit windowClosed(this); return; @@ -305,7 +308,6 @@ void MCompositeWindow::closeWindow() if (window_status == MCompositeWindow::Hung) { hide(); emit windowClosed(this); - QTimer::singleShot(200, this, SLOT(deleteLater())); return; } window_status = MCompositeWindow::Closing; @@ -354,7 +356,6 @@ void MCompositeWindow::finalizeState() emit itemIconified(this); if (isClosing()) { emit windowClosed(this); - QTimer::singleShot(200, this, SLOT(deleteLater())); return; } } else { @@ -647,3 +648,13 @@ int MCompositeWindow::indexInStack() const MCompositeManager *p = (MCompositeManager *) qApp; return p->d->stacking_list.indexOf(window()); } + +void MCompositeWindow::setIsMapped(bool mapped) +{ + pc->setIsMapped(mapped); +} + +bool MCompositeWindow::isMapped() const +{ + return pc->isMapped(); +} |