From c09f4039d1a88b2d175647e642ffa3eeb4cd04e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Gr=C3=A4=C3=9Flin?= Date: Mon, 9 Nov 2015 16:27:15 +0100 Subject: [PATCH] Only emit EffectsHandler::windowClosed if Deleted got created Ensures that Effects cannot ref a window during tear down and then abort because there is no Deleted for the EffectWindow. --- effects.cpp | 6 ++++-- effects.h | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/effects.cpp b/effects.cpp index 5ccf94f6c8..46409e3652 100644 --- a/effects.cpp +++ b/effects.cpp @@ -599,10 +599,12 @@ void EffectsHandlerImpl::slotUnmanagedShown(KWin::Toplevel *t) emit windowAdded(u->effectWindow()); } -void EffectsHandlerImpl::slotWindowClosed(KWin::Toplevel *c) +void EffectsHandlerImpl::slotWindowClosed(KWin::Toplevel *c, KWin::Deleted *d) { c->disconnect(this); - emit windowClosed(c->effectWindow()); + if (d) { + emit windowClosed(c->effectWindow()); + } } void EffectsHandlerImpl::slotClientModalityChanged() diff --git a/effects.h b/effects.h index e607c11116..c2e0221429 100644 --- a/effects.h +++ b/effects.h @@ -245,7 +245,7 @@ protected Q_SLOTS: void slotClientShown(KWin::Toplevel*); void slotShellClientShown(KWin::Toplevel*); void slotUnmanagedShown(KWin::Toplevel*); - void slotWindowClosed(KWin::Toplevel *c); + void slotWindowClosed(KWin::Toplevel *c, KWin::Deleted *d); void slotClientMaximized(KWin::AbstractClient *c, MaximizeMode maxMode); void slotOpacityChanged(KWin::Toplevel *t, qreal oldOpacity); void slotClientModalityChanged();