diff options
| author | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-04-13 20:45:06 +0200 |
|---|---|---|
| committer | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-04-13 20:45:06 +0200 |
| commit | 158af1eb090dbae7650e99878942363651c216e3 (patch) | |
| tree | 4fdb09c9621b439f1fcd22e8151d0f6d863bd58f /src/managers/KeybindManager.cpp | |
| parent | a558bcdfbffe41ac92302456468609e62bca2282 (diff) | |
better keyboard window switching
Diffstat (limited to 'src/managers/KeybindManager.cpp')
| -rw-r--r-- | src/managers/KeybindManager.cpp | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index 54d5b605..dbb5fa06 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -281,16 +281,32 @@ void CKeybindManager::moveFocusTo(std::string args) { const auto PLASTWINDOW = g_pCompositor->m_pLastWindow; - if (!g_pCompositor->windowValidMapped(PLASTWINDOW)) + auto switchToWindow = [&](CWindow* PWINDOWTOCHANGETO) { + g_pCompositor->focusWindow(PWINDOWTOCHANGETO); + Vector2D middle = PWINDOWTOCHANGETO->m_vEffectivePosition + PWINDOWTOCHANGETO->m_vEffectiveSize / 2.f; + wlr_cursor_warp(g_pCompositor->m_sWLRCursor, nullptr, middle.x, middle.y); + }; + + if (!g_pCompositor->windowValidMapped(PLASTWINDOW)) { + const auto PWINDOWTOCHANGETO = g_pCompositor->getFirstWindowOnWorkspace(g_pCompositor->m_pLastMonitor->activeWorkspace); + if (!PWINDOWTOCHANGETO) + return; + + switchToWindow(PWINDOWTOCHANGETO); + return; + } const auto PWINDOWTOCHANGETO = g_pCompositor->getWindowInDirection(PLASTWINDOW, arg); if (PWINDOWTOCHANGETO) { - g_pCompositor->focusWindow(PWINDOWTOCHANGETO); - Vector2D middle = PWINDOWTOCHANGETO->m_vPosition + PWINDOWTOCHANGETO->m_vSize / 2.f; - wlr_cursor_warp(g_pCompositor->m_sWLRCursor, nullptr, middle.x, middle.y); - } + switchToWindow(PWINDOWTOCHANGETO); + } else { + const auto PWINDOWNEXT = g_pCompositor->getNextWindowOnWorkspace(PLASTWINDOW); + if (PWINDOWNEXT) { + switchToWindow(PWINDOWNEXT); + } + } } void CKeybindManager::toggleGroup(std::string args) { |
