diff --git a/src/modules/shortcut/shortcutrunner.cpp b/src/modules/shortcut/shortcutrunner.cpp index 325ac40fe..a35499137 100644 --- a/src/modules/shortcut/shortcutrunner.cpp +++ b/src/modules/shortcut/shortcutrunner.cpp @@ -164,13 +164,21 @@ void ShortcutRunner::onActionTrigger(ShortcutAction action, const QString &name, break; case ShortcutAction::Lockscreen: #ifndef DISABLE_DDM - if (helper->m_lockScreen && helper->m_lockScreen->available() && helper->currentMode() == Helper::CurrentMode::Normal) { + if (helper->m_lockScreen && helper->m_lockScreen->available() + && (helper->currentMode() == Helper::CurrentMode::Normal + || helper->currentMode() == Helper::CurrentMode::Multitaskview)) { helper->showLockScreen(); } #endif break; case ShortcutAction::ShutdownMenu: - if (helper->m_lockScreen && helper->m_lockScreen->available() && helper->currentMode() == Helper::CurrentMode::Normal) { + if (helper->m_lockScreen && helper->m_lockScreen->available() + && (helper->currentMode() == Helper::CurrentMode::Normal + || helper->currentMode() == Helper::CurrentMode::Multitaskview)) { + if (helper->m_multitaskView) { + helper->m_multitaskView->immediatelyExit(); + } + helper->deleteTaskSwitch(); helper->setCurrentMode(Helper::CurrentMode::LockScreen); helper->m_lockScreen->shutdown(); helper->setWorkspaceVisible(false); diff --git a/src/seat/helper.cpp b/src/seat/helper.cpp index 369aed990..9f3975288 100644 --- a/src/seat/helper.cpp +++ b/src/seat/helper.cpp @@ -2286,21 +2286,39 @@ void Helper::handleRequestDrag([[maybe_unused]] WSurface *surface) void Helper::handleLockScreen(LockScreenInterface *lockScreen) { connect(lockScreen, &LockScreenInterface::shutdown, this, [this]() { - if (m_lockScreen && m_lockScreen->available() && currentMode() == Helper::CurrentMode::Normal) { + if (m_lockScreen && m_lockScreen->available() + && (currentMode() == Helper::CurrentMode::Normal + || currentMode() == Helper::CurrentMode::Multitaskview)) { + if (m_multitaskView) { + m_multitaskView->immediatelyExit(); + } + deleteTaskSwitch(); setCurrentMode(CurrentMode::LockScreen); m_lockScreen->shutdown(); setWorkspaceVisible(false); } }); connect(lockScreen, &LockScreenInterface::lock, this, [this]() { - if (m_lockScreen && m_lockScreen->available() && currentMode() == Helper::CurrentMode::Normal) { + if (m_lockScreen && m_lockScreen->available() + && (currentMode() == Helper::CurrentMode::Normal + || currentMode() == Helper::CurrentMode::Multitaskview)) { + if (m_multitaskView) { + m_multitaskView->immediatelyExit(); + } + deleteTaskSwitch(); setCurrentMode(CurrentMode::LockScreen); m_lockScreen->lock(); setWorkspaceVisible(false); } }); connect(lockScreen, &LockScreenInterface::switchUser, this, [this]() { - if (m_lockScreen && m_lockScreen->available() && currentMode() == Helper::CurrentMode::Normal) { + if (m_lockScreen && m_lockScreen->available() + && (currentMode() == Helper::CurrentMode::Normal + || currentMode() == Helper::CurrentMode::Multitaskview)) { + if (m_multitaskView) { + m_multitaskView->immediatelyExit(); + } + deleteTaskSwitch(); setCurrentMode(CurrentMode::LockScreen); m_lockScreen->switchUser(); setWorkspaceVisible(false);