[wayland] Ensure we can tear down ShellClient after Workspace is destroyed

This can happen during tear down of the internal shell clients.
icc-effect-5.14.5
Martin Gräßlin 2015-11-10 14:27:03 +01:00
parent affcbac7e7
commit 3f4e733468
1 changed files with 19 additions and 12 deletions

View File

@ -155,9 +155,13 @@ ShellClient::~ShellClient() = default;
void ShellClient::destroyClient()
{
m_closing = true;
Deleted *del = Deleted::create(this);
Deleted *del = nullptr;
if (workspace()) {
del = Deleted::create(this);
}
emit windowClosed(this, del);
if (workspace()) {
StackingUpdatesBlocker blocker(workspace());
if (transientFor()) {
transientFor()->removeTransient(this);
@ -170,9 +174,12 @@ void ShellClient::destroyClient()
++it;
}
}
}
waylandServer()->removeClient(this);
if (del) {
del->unrefWindow();
}
m_shellSurface = nullptr;
deleteClient(this);
}