diff --git a/ksmserver/org.kde.KWin.Session.xml b/ksmserver/org.kde.KWin.Session.xml index e0f303826..8ecf3215e 100644 --- a/ksmserver/org.kde.KWin.Session.xml +++ b/ksmserver/org.kde.KWin.Session.xml @@ -19,5 +19,8 @@ + + + diff --git a/startkde/plasma-shutdown/CMakeLists.txt b/startkde/plasma-shutdown/CMakeLists.txt index 2393d7363..86f401e7e 100644 --- a/startkde/plasma-shutdown/CMakeLists.txt +++ b/startkde/plasma-shutdown/CMakeLists.txt @@ -8,6 +8,7 @@ ecm_qt_declare_logging_category(plasma_shutdown_SRCS HEADER debug.h IDENTIFIER qt5_add_dbus_adaptor(plasma_shutdown_SRCS org.kde.Shutdown.xml shutdown.h Shutdown) qt5_add_dbus_interface(plasma_shutdown_SRCS org.kde.Shutdown.xml shutdown_interface) qt5_add_dbus_interface( plasma_shutdown_SRCS ../../ksmserver/org.kde.KSMServerInterface.xml ksmserver_interface ) +qt5_add_dbus_interface( plasma_shutdown_SRCS ../../ksmserver/org.kde.KWin.Session.xml kwin_interface ) add_executable(plasma-shutdown ${plasma_shutdown_SRCS}) diff --git a/startkde/plasma-shutdown/shutdown.cpp b/startkde/plasma-shutdown/shutdown.cpp index 2ed40795d..ad21b622a 100644 --- a/startkde/plasma-shutdown/shutdown.cpp +++ b/startkde/plasma-shutdown/shutdown.cpp @@ -9,6 +9,7 @@ #include "sessionmanagementbackend.h" #include "ksmserver_interface.h" +#include "kwin_interface.h" #include "debug.h" @@ -66,6 +67,12 @@ void Shutdown::logoutCancelled() void Shutdown::logoutComplete() { runShutdownScripts(); + + // technically this isn't needed in the systemd managed mode, but it seems harmless for now. Guard if it becomes an issue + OrgKdeKWinSessionInterface kwinInterface(QStringLiteral("org.kde.KWin"), QStringLiteral("/Session"), QDBusConnection::sessionBus()); + QDBusPendingReply<> reply = kwinInterface.quit(); + reply.waitForFinished(); + if (m_shutdownType == KWorkSpace::ShutdownTypeHalt) { SessionBackend::self()->shutdown(); } else if (m_shutdownType == KWorkSpace::ShutdownTypeReboot) {