Add an explicit quit mechanism controlled by plasma

On X Kwin's lifespan used to be managed by XSMP. This accidentally broke
in 5.20 as we made kwin start before ksmserver for speed purposes.

This leaves kwin to be killed by the display manager as the X connection
closes, but this can lead to deadlocks.

BUG:428817

On wayland kwin's lifespan is mapped to the lifespan of the ksmserver
binary. This is problematic as it makes our entire xwayland robustness
redundant if we ultimately rely on an application that /has/ to run in
xwayland.

BUG: 427688
icc-effect-5.26.4
David Edmundson 2020-11-13 13:08:02 +00:00
parent 8f104815e8
commit 71ce1f7a5b
3 changed files with 9 additions and 0 deletions

View File

@ -19,6 +19,9 @@
<method name="finishSaveSession">
<arg name="name" type="s" direction="in" />
</method>
<!-- Shutdown kwin at the end of the session -->
<method name="quit">
</method>
</interface>
</node>

5
sm.cpp
View File

@ -379,5 +379,10 @@ void SessionManager::finishSaveSession(const QString &name)
emit finishSessionSaveRequested(name);
}
void SessionManager::quit()
{
qApp->quit();
}
} // namespace

1
sm.h
View File

@ -43,6 +43,7 @@ public Q_SLOTS: // DBus API
void loadSession(const QString &name);
void aboutToSaveSession(const QString &name);
void finishSaveSession(const QString &name);
void quit();
private:
void setState(SessionState state);