[wayland] Ensure we can tear down ShellClient after Workspace is destroyed
This can happen during tear down of the internal shell clients.
This commit is contained in:
parent
affcbac7e7
commit
3f4e733468
1 changed files with 19 additions and 12 deletions
|
@ -155,24 +155,31 @@ 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);
|
||||
|
||||
StackingUpdatesBlocker blocker(workspace());
|
||||
if (transientFor()) {
|
||||
transientFor()->removeTransient(this);
|
||||
}
|
||||
for (auto it = transients().constBegin(); it != transients().constEnd();) {
|
||||
if ((*it)->transientFor() == this) {
|
||||
removeTransient(*it);
|
||||
it = transients().constBegin(); // restart, just in case something more has changed with the list
|
||||
} else {
|
||||
++it;
|
||||
if (workspace()) {
|
||||
StackingUpdatesBlocker blocker(workspace());
|
||||
if (transientFor()) {
|
||||
transientFor()->removeTransient(this);
|
||||
}
|
||||
for (auto it = transients().constBegin(); it != transients().constEnd();) {
|
||||
if ((*it)->transientFor() == this) {
|
||||
removeTransient(*it);
|
||||
it = transients().constBegin(); // restart, just in case something more has changed with the list
|
||||
} else {
|
||||
++it;
|
||||
}
|
||||
}
|
||||
}
|
||||
waylandServer()->removeClient(this);
|
||||
|
||||
del->unrefWindow();
|
||||
if (del) {
|
||||
del->unrefWindow();
|
||||
}
|
||||
m_shellSurface = nullptr;
|
||||
deleteClient(this);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue