diff options
| author | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-05-30 20:05:38 +0200 |
|---|---|---|
| committer | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-05-30 20:05:38 +0200 |
| commit | 1f4c938c67dc0eb13963952bb4a061a304b5f246 (patch) | |
| tree | 25ce68edc4e751b832315c4a8d09dc27831a80b9 /src/managers/KeybindManager.cpp | |
| parent | c44c79abb269da36b68d0524f45aa4c0b92dedca (diff) | |
Added moving workspaces
Diffstat (limited to 'src/managers/KeybindManager.cpp')
| -rw-r--r-- | src/managers/KeybindManager.cpp | 60 |
1 files changed, 59 insertions, 1 deletions
diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index 5f692ecc..7ebe158b 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -21,6 +21,8 @@ CKeybindManager::CKeybindManager() { m_mDispatchers["movecursortocorner"] = moveCursorToCorner; m_mDispatchers["workspaceopt"] = workspaceOpt; m_mDispatchers["exit"] = exitHyprland; + m_mDispatchers["movecurrentworkspacetomonitor"] = moveCurrentWorkspaceToMonitor; + m_mDispatchers["moveworkspacetomonitor"] = moveWorkspaceToMonitor; } void CKeybindManager::addKeybind(SKeybind kb) { @@ -232,6 +234,9 @@ void CKeybindManager::changeworkspace(std::string args) { g_pCompositor->deactivateAllWLRWorkspaces(PWORKSPACETOCHANGETO->m_pWlrHandle); PWORKSPACETOCHANGETO->setActive(true); + // recalc layout + g_pLayoutManager->getCurrentLayout()->recalculateMonitor(PWORKSPACETOCHANGETO->m_iMonitorID); + Debug::log(LOG, "Changed to workspace %i", workspaceToChangeTo); // focus @@ -252,7 +257,8 @@ void CKeybindManager::changeworkspace(std::string args) { const auto ANIMTOLEFT = workspaceToChangeTo > OLDWORKSPACE; // start anim on old workspace - g_pCompositor->getWorkspaceByID(OLDWORKSPACE)->startAnim(false, ANIMTOLEFT); + if (const auto POLDWORKSPACE = g_pCompositor->getWorkspaceByID(OLDWORKSPACE); POLDWORKSPACE) + POLDWORKSPACE->startAnim(false, ANIMTOLEFT); g_pCompositor->m_lWorkspaces.emplace_back(PMONITOR->ID); const auto PWORKSPACE = &g_pCompositor->m_lWorkspaces.back(); @@ -689,4 +695,56 @@ void CKeybindManager::workspaceOpt(std::string args) { void CKeybindManager::exitHyprland(std::string argz) { g_pCompositor->cleanupExit(); exit(0); +} + +void CKeybindManager::moveCurrentWorkspaceToMonitor(std::string args) { + if (!isNumber(args) && !isDirection(args)) { + Debug::log(ERR, "moveCurrentWorkspaceToMonitor arg not a number or direction!"); + return; + } + + const auto PMONITOR = isDirection(args) ? g_pCompositor->getMonitorInDirection(args[0]) : g_pCompositor->getMonitorFromID(std::stoi(args)); + + if (!PMONITOR) { + Debug::log(ERR, "Ignoring moveCurrentWorkspaceToMonitor: monitor doesnt exist"); + return; + } + + // get the current workspace + const auto PCURRENTWORKSPACE = g_pCompositor->getWorkspaceByID(g_pCompositor->m_pLastMonitor->activeWorkspace); + + if (!PCURRENTWORKSPACE) + return; + + g_pCompositor->moveWorkspaceToMonitor(PCURRENTWORKSPACE, PMONITOR); +} + +void CKeybindManager::moveWorkspaceToMonitor(std::string args) { + + std::string workspace = args.substr(0, args.find_first_of(' ')); + std::string monitor = args.substr(args.find_first_of(' ') + 1); + + if (!isNumber(monitor) && !isDirection(monitor)) { + Debug::log(ERR, "moveWorkspaceToMonitor monitor arg not a number or direction!"); + return; + } + + const auto PMONITOR = isDirection(monitor) ? g_pCompositor->getMonitorInDirection(monitor[0]) : g_pCompositor->getMonitorFromID(std::stoi(monitor)); + + if (!PMONITOR){ + Debug::log(ERR, "Ignoring moveWorkspaceToMonitor: monitor doesnt exist"); + return; + } + + std::string workspaceName; + const int WORKSPACEID = getWorkspaceIDFromString(workspace, workspaceName); + + if (WORKSPACEID == INT_MAX) { + Debug::log(ERR, "moveWorkspaceToMonitor invalid workspace!"); + return; + } + + const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(WORKSPACEID); + + g_pCompositor->moveWorkspaceToMonitor(PWORKSPACE, PMONITOR); }
\ No newline at end of file |
