From 6f8ca7decb884e75a77756b75abd1018dc2079ca Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Fri, 10 May 2024 04:21:28 +0300 Subject: [PATCH] plasma: queue logout if one is requested during initialization that brings it mostly on par with the old session management implementation Signed-off-by: Ivailo Monev --- plasma/shells/plasma-desktop/plasmaapp.cpp | 19 +++++++++++++++---- plasma/shells/plasma-desktop/plasmaapp.h | 2 ++ 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/plasma/shells/plasma-desktop/plasmaapp.cpp b/plasma/shells/plasma-desktop/plasmaapp.cpp index 0e926520..50798b35 100644 --- a/plasma/shells/plasma-desktop/plasmaapp.cpp +++ b/plasma/shells/plasma-desktop/plasmaapp.cpp @@ -119,6 +119,8 @@ PlasmaApp::PlasmaApp() m_wmProc(nullptr), m_startupSuspend(0), m_dialogActive(false), + m_logoutAfterStartup(false), + m_confirm(0), m_sdtype(KWorkSpace::ShutdownTypeNone), m_sessionManager(false) { @@ -1103,10 +1105,15 @@ void PlasmaApp::resumeStartup(const QString &app) void PlasmaApp::logout(int confirm, int sdtype) { - // TODO: prevent logout while initializing - kDebug() << "logout" << confirm << sdtype; + m_confirm = confirm; m_sdtype = static_cast(sdtype); - if (confirm == KWorkSpace::ShutdownConfirmNo) { + if (m_phaseTimer) { + kDebug() << "logout queued" << m_confirm << m_sdtype; + m_logoutAfterStartup = true; + return; + } + kDebug() << "logout" << m_confirm << m_sdtype; + if (m_confirm == KWorkSpace::ShutdownConfirmNo) { QTimer::singleShot(s_sessiondelay, this, SLOT(saveClients())); return; } @@ -1217,7 +1224,11 @@ void PlasmaApp::nextPhase() } kDebug() << "startup done"; KNotification::event("kde/startkde"); - break; + if (m_logoutAfterStartup) { + kDebug() << "starting queued logout" << m_confirm << m_sdtype; + logout(m_confirm, m_sdtype); + } + return; } } m_phase++; diff --git a/plasma/shells/plasma-desktop/plasmaapp.h b/plasma/shells/plasma-desktop/plasmaapp.h index 2865a97e..044ed4c6 100644 --- a/plasma/shells/plasma-desktop/plasmaapp.h +++ b/plasma/shells/plasma-desktop/plasmaapp.h @@ -174,6 +174,8 @@ private: QProcess* m_wmProc; int m_startupSuspend; bool m_dialogActive; + bool m_logoutAfterStartup; + int m_confirm; KWorkSpace::ShutdownType m_sdtype; bool m_sessionManager; QList m_clients;