diff --git a/src/Compositor.hpp b/src/Compositor.hpp index df8de0c0d..64cd6e43a 100644 --- a/src/Compositor.hpp +++ b/src/Compositor.hpp @@ -118,6 +118,7 @@ class CCompositor { bool m_bUnsafeState = false; // unsafe state is when there is no monitors. bool m_bNextIsUnsafe = false; // because wlroots CMonitor* m_pUnsafeOutput = nullptr; // fallback output for the unsafe state + bool m_bExitTriggered = false; // For exit dispatcher bool m_bIsShuttingDown = false; // ------------------------------------------------- // diff --git a/src/events/Monitors.cpp b/src/events/Monitors.cpp index e235096b1..a6fd5a4a7 100644 --- a/src/events/Monitors.cpp +++ b/src/events/Monitors.cpp @@ -117,6 +117,13 @@ void Events::listener_newOutput(wl_listener* listener, void* data) { } void Events::listener_monitorFrame(void* owner, void* data) { + if (g_pCompositor->m_bExitTriggered) { + // Only signal cleanup once + g_pCompositor->m_bExitTriggered = false; + g_pCompositor->cleanup(); + return; + } + CMonitor* const PMONITOR = (CMonitor*)owner; if ((g_pCompositor->m_sWLRSession && !g_pCompositor->m_sWLRSession->active) || !g_pCompositor->m_bSessionActive || g_pCompositor->m_bUnsafeState) { diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index 8a1d022bf..a8d390fa3 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -1512,7 +1512,7 @@ void CKeybindManager::renameWorkspace(std::string args) { } void CKeybindManager::exitHyprland(std::string argz) { - g_pInputManager->m_bExitTriggered = true; + g_pCompositor->m_bExitTriggered = true; } void CKeybindManager::moveCurrentWorkspaceToMonitor(std::string args) { diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index 9f38ab22f..942455875 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -1189,9 +1189,6 @@ void CInputManager::onKeyboardKey(wlr_keyboard_key_event* e, SKeyboard* pKeyboar updateKeyboardsLeds(pKeyboard->keyboard); } - - if (m_bExitTriggered) - g_pCompositor->cleanup(); } void CInputManager::onKeyboardMod(void* data, SKeyboard* pKeyboard) { diff --git a/src/managers/input/InputManager.hpp b/src/managers/input/InputManager.hpp index 128badfc1..a89981f3d 100644 --- a/src/managers/input/InputManager.hpp +++ b/src/managers/input/InputManager.hpp @@ -251,8 +251,6 @@ class CInputManager { void restoreCursorIconToApp(); // no-op if restored - bool m_bExitTriggered = false; // for exit dispatcher - friend class CKeybindManager; friend class CWLSurface; };