From a14f6b570f7dc99d81db1a8cccbae986c3f98f64 Mon Sep 17 00:00:00 2001 From: shezdy <77217897+shezdy@users.noreply.github.com> Date: Sun, 25 Feb 2024 17:05:20 -0700 Subject: [PATCH] keybinds: fix focuswindow for fullscreen (#4840) * focuswindow fix * fix format --------- Co-authored-by: ddmetz <77217897+ddmetz@users.noreply.github.com> --- src/Compositor.cpp | 3 ++- src/managers/KeybindManager.cpp | 26 ++++++++++++++++++++------ 2 files changed, 22 insertions(+), 7 deletions(-) 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()); }