summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordmayle <douglas@mayle.org>2024-03-24 18:46:59 -0700
committerGitHub <noreply@github.com>2024-03-25 01:46:59 +0000
commit6b28bf563e3b4e5f6631985f24c88e8a8ebaa0d4 (patch)
tree5f17c7fd233e2a3734727d724ce354e99d08cd93 /src
parent8001b96bb5f801ea665fd482ba421e8703d986e7 (diff)
keybinds: Fix exit trigger by moving it to monitor.frame (#5240)
Diffstat (limited to 'src')
-rw-r--r--src/Compositor.hpp1
-rw-r--r--src/events/Monitors.cpp7
-rw-r--r--src/managers/KeybindManager.cpp2
-rw-r--r--src/managers/input/InputManager.cpp3
-rw-r--r--src/managers/input/InputManager.hpp2
5 files changed, 9 insertions, 6 deletions
diff --git a/src/Compositor.hpp b/src/Compositor.hpp
index df8de0c0..64cd6e43 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 e235096b..a6fd5a4a 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 8a1d022b..a8d390fa 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 9f38ab22..94245587 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 128badfc..a89981f3 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;
};