summaryrefslogtreecommitdiff
path: root/src/managers/KeybindManager.cpp
diff options
context:
space:
mode:
authorvaxerski <vaxry@vaxry.net>2022-08-11 19:45:37 +0200
committervaxerski <vaxry@vaxry.net>2022-08-11 19:45:37 +0200
commitc9ed5bf77e576bc348b4a8309a8e8c04cc27c038 (patch)
treed2a67bab86b1416ae733e04bb576eff5947e135a /src/managers/KeybindManager.cpp
parentf4f049505076c95aaf613feb87e39a6cdf730dd2 (diff)
fix cyclenext with fullscreen windows
Diffstat (limited to 'src/managers/KeybindManager.cpp')
-rw-r--r--src/managers/KeybindManager.cpp24
1 files changed, 18 insertions, 6 deletions
diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp
index c5899bf9..7fb260c3 100644
--- a/src/managers/KeybindManager.cpp
+++ b/src/managers/KeybindManager.cpp
@@ -1261,14 +1261,26 @@ void CKeybindManager::circleNext(std::string arg) {
if (PWORKSPACE->m_bHasFullscreenWindow)
return;
- if (arg == "last" || arg == "l" || arg == "prev" || arg == "p")
- g_pCompositor->focusWindow(g_pCompositor->getPrevWindowOnWorkspace(g_pCompositor->m_pLastWindow));
- else
- g_pCompositor->focusWindow(g_pCompositor->getNextWindowOnWorkspace(g_pCompositor->m_pLastWindow));
+ auto switchToWindow = [&](CWindow* PWINDOWTOCHANGETO) {
+ if (g_pCompositor->m_pLastWindow->m_iWorkspaceID == PWINDOWTOCHANGETO->m_iWorkspaceID && g_pCompositor->m_pLastWindow->m_bIsFullscreen) {
+ const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(g_pCompositor->m_pLastWindow->m_iWorkspaceID);
+ const auto FSMODE = PWORKSPACE->m_efFullscreenMode;
+ g_pCompositor->setWindowFullscreen(g_pCompositor->m_pLastWindow, false, FULLSCREEN_FULL);
- const auto MIDPOINT = g_pCompositor->m_pLastWindow->m_vRealPosition.goalv() + g_pCompositor->m_pLastWindow->m_vRealSize.goalv() / 2.f;
+ g_pCompositor->focusWindow(PWINDOWTOCHANGETO);
- g_pCompositor->warpCursorTo(MIDPOINT);
+ g_pCompositor->setWindowFullscreen(PWINDOWTOCHANGETO, true, FSMODE);
+ } else {
+ g_pCompositor->focusWindow(PWINDOWTOCHANGETO);
+ Vector2D middle = PWINDOWTOCHANGETO->m_vRealPosition.goalv() + PWINDOWTOCHANGETO->m_vRealSize.goalv() / 2.f;
+ g_pCompositor->warpCursorTo(middle);
+ }
+ };
+
+ if (arg == "last" || arg == "l" || arg == "prev" || arg == "p")
+ switchToWindow(g_pCompositor->getPrevWindowOnWorkspace(g_pCompositor->m_pLastWindow));
+ else
+ switchToWindow(g_pCompositor->getNextWindowOnWorkspace(g_pCompositor->m_pLastWindow));
}
void CKeybindManager::focusWindow(std::string regexp) {