summaryrefslogtreecommitdiff
path: root/src/managers/KeybindManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/managers/KeybindManager.cpp')
-rw-r--r--src/managers/KeybindManager.cpp26
1 files changed, 20 insertions, 6 deletions
diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp
index de0f5fbc..143b7fda 100644
--- a/src/managers/KeybindManager.cpp
+++ b/src/managers/KeybindManager.cpp
@@ -1748,17 +1748,31 @@ void CKeybindManager::focusWindow(std::string regexp) {
Debug::log(LOG, "Focusing to window name: {}", PWINDOW->m_szTitle);
+ const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(PWINDOW->m_iWorkspaceID);
+ if (!PWORKSPACE) {
+ Debug::log(ERR, "BUG THIS: null workspace in focusWindow");
+ return;
+ }
+
if (g_pCompositor->m_pLastMonitor->activeWorkspace != PWINDOW->m_iWorkspaceID) {
Debug::log(LOG, "Fake executing workspace to move focus");
- const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(PWINDOW->m_iWorkspaceID);
- if (!PWORKSPACE) {
- Debug::log(ERR, "BUG THIS: null workspace in focusWindow");
- return;
- }
changeworkspace(PWORKSPACE->getConfigName());
}
- g_pCompositor->focusWindow(PWINDOW);
+ if (PWORKSPACE->m_bHasFullscreenWindow) {
+ const auto FSWINDOW = g_pCompositor->getFullscreenWindowOnWorkspace(PWORKSPACE->m_iID);
+ const auto FSMODE = PWORKSPACE->m_efFullscreenMode;
+
+ if (FSWINDOW != PWINDOW && !PWINDOW->m_bPinned)
+ g_pCompositor->setWindowFullscreen(FSWINDOW, false, FULLSCREEN_FULL);
+
+ g_pCompositor->focusWindow(PWINDOW);
+
+ if (FSWINDOW != PWINDOW && !PWINDOW->m_bPinned)
+ g_pCompositor->setWindowFullscreen(PWINDOW, true, FSMODE);
+ } else {
+ g_pCompositor->focusWindow(PWINDOW);
+ }
g_pCompositor->warpCursorTo(PWINDOW->middle());
}