summaryrefslogtreecommitdiff
path: root/src/desktop
diff options
context:
space:
mode:
Diffstat (limited to 'src/desktop')
-rw-r--r--src/desktop/Workspace.cpp12
-rw-r--r--src/desktop/Workspace.hpp1
-rw-r--r--src/desktop/state/FocusState.cpp8
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. */