summaryrefslogtreecommitdiff
path: root/src/mcompositewindow.cpp
diff options
context:
space:
mode:
authorAbdiel Janulgue <abdiel.janulgue@nokia.com>2010-08-18 18:55:39 +0300
committerAbdiel Janulgue <abdiel.janulgue@nokia.com>2010-08-18 18:55:39 +0300
commit932e865b31678f86bf67911b8595cacd8185d4cb (patch)
tree3ef2973f1c3393e6c8e70b0f1e201727c77f8028 /src/mcompositewindow.cpp
parentaf6f650c3cfd42a8cc3079984a3f1b90fb95e714 (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.cpp19
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();
+}