diff options
| author | thejch <66577496+thejch@users.noreply.github.com> | 2023-12-22 03:37:38 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-12-22 12:37:38 +0100 |
| commit | 7cec618fe47e457fe66ef772da00ef07665a8607 (patch) | |
| tree | 4cec17bdf483dd232a4f0755d97ccb21dbdbe05a /src/layout/MasterLayout.cpp | |
| parent | bd952dcef2ead3b0b7e2d730930a3fc528813ee0 (diff) | |
master: add dispatchers rollnext and rollprev (#4209)
Diffstat (limited to 'src/layout/MasterLayout.cpp')
| -rw-r--r-- | src/layout/MasterLayout.cpp | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/layout/MasterLayout.cpp b/src/layout/MasterLayout.cpp index 086bcdac..def03236 100644 --- a/src/layout/MasterLayout.cpp +++ b/src/layout/MasterLayout.cpp @@ -1332,6 +1332,50 @@ std::any CHyprMasterLayout::layoutMessage(SLayoutMessageHeader header, std::stri nd.percMaster = std::clamp(newMfact, 0.05f, 0.95f); } } + } else if (command == "rollnext") { + const auto PWINDOW = header.pWindow; + const auto PNODE = getNodeFromWindow(PWINDOW); + + const auto OLDMASTER = PNODE->isMaster ? PNODE : getMasterNodeOnWorkspace(PNODE->workspaceID); + const auto OLDMASTERIT = std::find(m_lMasterNodesData.begin(), m_lMasterNodesData.end(), *OLDMASTER); + + for (auto& nd : m_lMasterNodesData) { + if (nd.workspaceID == PNODE->workspaceID && !nd.isMaster) { + nd.isMaster = true; + const auto NEWMASTERIT = std::find(m_lMasterNodesData.begin(), m_lMasterNodesData.end(), nd); + m_lMasterNodesData.splice(OLDMASTERIT, m_lMasterNodesData, NEWMASTERIT); + const bool inheritFullscreen = prepareLoseFocus(PWINDOW); + switchToWindow(nd.pWindow); + prepareNewFocus(nd.pWindow, inheritFullscreen); + OLDMASTER->isMaster = false; + m_lMasterNodesData.splice(m_lMasterNodesData.end(), m_lMasterNodesData, OLDMASTERIT); + break; + } + } + + recalculateMonitor(PWINDOW->m_iMonitorID); + } else if (command == "rollprev") { + const auto PWINDOW = header.pWindow; + const auto PNODE = getNodeFromWindow(PWINDOW); + + const auto OLDMASTER = PNODE->isMaster ? PNODE : getMasterNodeOnWorkspace(PNODE->workspaceID); + const auto OLDMASTERIT = std::find(m_lMasterNodesData.begin(), m_lMasterNodesData.end(), *OLDMASTER); + + for (auto& nd : m_lMasterNodesData | std::views::reverse) { + if (nd.workspaceID == PNODE->workspaceID && !nd.isMaster) { + nd.isMaster = true; + const auto NEWMASTERIT = std::find(m_lMasterNodesData.begin(), m_lMasterNodesData.end(), nd); + m_lMasterNodesData.splice(OLDMASTERIT, m_lMasterNodesData, NEWMASTERIT); + const bool inheritFullscreen = prepareLoseFocus(PWINDOW); + switchToWindow(nd.pWindow); + prepareNewFocus(nd.pWindow, inheritFullscreen); + OLDMASTER->isMaster = false; + m_lMasterNodesData.splice(m_lMasterNodesData.begin(), m_lMasterNodesData, OLDMASTERIT); + break; + } + } + + recalculateMonitor(PWINDOW->m_iMonitorID); } return 0; |
