diff options
Diffstat (limited to 'src/desktop')
| -rw-r--r-- | src/desktop/Workspace.cpp | 12 | ||||
| -rw-r--r-- | src/desktop/Workspace.hpp | 1 | ||||
| -rw-r--r-- | src/desktop/state/FocusState.cpp | 8 |
3 files changed, 19 insertions, 2 deletions
diff --git a/src/desktop/Workspace.cpp b/src/desktop/Workspace.cpp index 60d8d985..23ea0dd7 100644 --- a/src/desktop/Workspace.cpp +++ b/src/desktop/Workspace.cpp @@ -83,6 +83,18 @@ PHLWINDOW CWorkspace::getLastFocusedWindow() { return m_lastFocusedWindow.lock(); } +PHLWINDOW CWorkspace::getFocusCandidate() { + auto pWindow = getLastFocusedWindow(); + + if (!pWindow) + pWindow = getTopLeftWindow(); + + if (!pWindow) + pWindow = getFirstWindow(); + + return pWindow; +} + std::string CWorkspace::getConfigName() { if (m_isSpecialWorkspace) { return m_name; diff --git a/src/desktop/Workspace.hpp b/src/desktop/Workspace.hpp index d778324d..1ccf1454 100644 --- a/src/desktop/Workspace.hpp +++ b/src/desktop/Workspace.hpp @@ -61,6 +61,7 @@ class CWorkspace { bool inert(); MONITORID monitorID(); PHLWINDOW getLastFocusedWindow(); + PHLWINDOW getFocusCandidate(); std::string getConfigName(); bool matchesStaticSelector(const std::string& selector); void markInert(); diff --git a/src/desktop/state/FocusState.cpp b/src/desktop/state/FocusState.cpp index 5db4bac5..5dd22f94 100644 --- a/src/desktop/state/FocusState.cpp +++ b/src/desktop/state/FocusState.cpp @@ -167,8 +167,12 @@ void CFocusState::rawWindowFocus(PHLWINDOW pWindow, eFocusReason reason, SP<CWLS return; } - const auto PLASTWINDOW = m_focusWindow.lock(); - m_focusWindow = pWindow; + if (PMONITOR && !pWindow->m_pinned) + rawMonitorFocus(PMONITOR); + + const auto PLASTWINDOW = m_focusWindow.lock(); + m_focusWindow = pWindow; + pWindow->m_workspace->m_lastFocusedWindow = pWindow; /* If special fallthrough is enabled, this behavior will be disabled, as I have no better idea of nicely tracking which window focuses are "via keybinds" and which ones aren't. */ |
