summaryrefslogtreecommitdiff
path: root/src/layout/MasterLayout.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/layout/MasterLayout.cpp')
-rw-r--r--src/layout/MasterLayout.cpp44
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;