From 1a55fb417093fb945942dba63d0edb9467d782ef Mon Sep 17 00:00:00 2001 From: abbadanor <69853409+abbadanor@users.noreply.github.com> Date: Mon, 7 Nov 2022 13:16:30 +0100 Subject: [PATCH] Dispatcher to center floating window (#961) Co-authored-by: Adam Nord <adam.nord@abbgymnasiet.se> Co-authored-by: vaxerski <vaxry@vaxry.net> --- src/managers/KeybindManager.cpp | 17 +++++++++++++++-- src/managers/KeybindManager.hpp | 1 + 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index e690c7f3e..0e6f14859 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -16,6 +16,7 @@ CKeybindManager::CKeybindManager() { m_mDispatchers["pseudo"] = toggleActivePseudo; m_mDispatchers["movefocus"] = moveFocusTo; m_mDispatchers["movewindow"] = moveActiveTo; + m_mDispatchers["centerwindow"] = centerWindow; m_mDispatchers["togglegroup"] = toggleGroup; m_mDispatchers["changegroupactive"] = changeGroupActive; m_mDispatchers["togglesplit"] = toggleSplit; @@ -579,6 +580,18 @@ void CKeybindManager::toggleActiveFloating(std::string args) { g_pLayoutManager->getCurrentLayout()->changeWindowFloatingMode(PWINDOW); } +void CKeybindManager::centerWindow(std::string args) { + const auto PWINDOW = g_pCompositor->m_pLastWindow; + + if (!PWINDOW || !PWINDOW->m_bIsFloating || PWINDOW->m_bIsFullscreen) + return; + + const auto PMONITOR = g_pCompositor->getMonitorFromID(PWINDOW->m_iMonitorID); + + PWINDOW->m_vRealPosition = PMONITOR->vecPosition + PMONITOR->vecSize / 2.f - PWINDOW->m_vRealSize.goalv() / 2.f; + PWINDOW->m_vPosition = PWINDOW->m_vRealPosition.goalv(); +} + void CKeybindManager::toggleActivePseudo(std::string args) { const auto ACTIVEWINDOW = g_pCompositor->m_pLastWindow; @@ -617,7 +630,7 @@ void CKeybindManager::changeworkspace(std::string args) { return; } else { workspaceToChangeTo = PCURRENTWORKSPACE->m_iPrevWorkspaceID; - + if (const auto PWORKSPACETOCHANGETO = g_pCompositor->getWorkspaceByID(workspaceToChangeTo); PWORKSPACETOCHANGETO) workspaceName = PWORKSPACETOCHANGETO->m_szName; else @@ -650,7 +663,7 @@ void CKeybindManager::changeworkspace(std::string args) { const auto PPREVWORKSPACE = g_pCompositor->getWorkspaceByID(PCURRENTWORKSPACE->m_iPrevWorkspaceID); workspaceToChangeTo = PCURRENTWORKSPACE->m_iPrevWorkspaceID; - + if (PPREVWORKSPACE) workspaceName = PPREVWORKSPACE->m_szName; else diff --git a/src/managers/KeybindManager.hpp b/src/managers/KeybindManager.hpp index e3404c33c..15748709e 100644 --- a/src/managers/KeybindManager.hpp +++ b/src/managers/KeybindManager.hpp @@ -92,6 +92,7 @@ private: static void moveActiveToWorkspace(std::string); static void moveActiveToWorkspaceSilent(std::string); static void moveFocusTo(std::string); + static void centerWindow(std::string); static void moveActiveTo(std::string); static void toggleGroup(std::string); static void changeGroupActive(std::string);