diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 3ac2d9b8..5d76054b 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -1806,7 +1806,8 @@ CMonitor* CCompositor::getMonitorInDirection(const char& dir) { } CMonitor* CCompositor::getMonitorInDirection(CMonitor* pSourceMonitor, const char& dir) { - if(!pSourceMonitor) return nullptr; + if (!pSourceMonitor) + return nullptr; const auto POSA = pSourceMonitor->vecPosition; const auto SIZEA = pSourceMonitor->vecSize; 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()); }