From ef7ac53e99c9c443241fd50a38e6edf528df3d7b Mon Sep 17 00:00:00 2001 From: thejch <66577496+thejch@users.noreply.github.com> Date: Sun, 31 Mar 2024 19:02:47 -0700 Subject: master: Make master workspace orientation rule dynamic (#5339) * make master workspace orientation rule dynamic * fix rebase * fix special ws resizing * style --- src/layout/MasterLayout.cpp | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) (limited to 'src/layout/MasterLayout.cpp') diff --git a/src/layout/MasterLayout.cpp b/src/layout/MasterLayout.cpp index 9c49197e..cac64c6d 100644 --- a/src/layout/MasterLayout.cpp +++ b/src/layout/MasterLayout.cpp @@ -53,17 +53,16 @@ SMasterWorkspaceData* CHyprMasterLayout::getMasterWorkspaceData(const int& ws) { orientationForWs = wsRule.layoutopts.at("orientation"); } - if (orientationForWs == "top") { + if (orientationForWs == "top") PWORKSPACEDATA->orientation = ORIENTATION_TOP; - } else if (orientationForWs == "right") { + else if (orientationForWs == "right") PWORKSPACEDATA->orientation = ORIENTATION_RIGHT; - } else if (orientationForWs == "bottom") { + else if (orientationForWs == "bottom") PWORKSPACEDATA->orientation = ORIENTATION_BOTTOM; - } else if (orientationForWs == "center") { + else if (orientationForWs == "center") PWORKSPACEDATA->orientation = ORIENTATION_CENTER; - } else { + else PWORKSPACEDATA->orientation = ORIENTATION_LEFT; - } return PWORKSPACEDATA; } @@ -339,6 +338,26 @@ void CHyprMasterLayout::calculateWorkspace(const int& ws) { if (!PMASTERNODE) return; + // dynamic workspace rules + const auto WORKSPACERULES = g_pConfigManager->getWorkspaceRulesFor(g_pCompositor->getWorkspaceByID(ws)); + std::string orientationForWs; + + for (auto& wsRule : WORKSPACERULES) { + if (wsRule.layoutopts.contains("orientation")) + orientationForWs = wsRule.layoutopts.at("orientation"); + } + + if (orientationForWs == "top") + PWORKSPACEDATA->orientation = ORIENTATION_TOP; + else if (orientationForWs == "right") + PWORKSPACEDATA->orientation = ORIENTATION_RIGHT; + else if (orientationForWs == "bottom") + PWORKSPACEDATA->orientation = ORIENTATION_BOTTOM; + else if (orientationForWs == "center") + PWORKSPACEDATA->orientation = ORIENTATION_CENTER; + else if (orientationForWs == "left") + PWORKSPACEDATA->orientation = ORIENTATION_LEFT; + eOrientation orientation = PWORKSPACEDATA->orientation; bool centerMasterWindow = false; static auto ALWAYSCENTER = CConfigValue("master:always_center_master"); @@ -753,7 +772,7 @@ void CHyprMasterLayout::resizeActiveWindow(const Vector2D& pixResize, eRectCorne } const auto PMONITOR = g_pCompositor->getMonitorFromID(PWINDOW->m_iMonitorID); - const auto PWORKSPACEDATA = getMasterWorkspaceData(PMONITOR->activeWorkspace); + const auto PWORKSPACEDATA = getMasterWorkspaceData(PWINDOW->m_iWorkspaceID); static auto ALWAYSCENTER = CConfigValue("master:always_center_master"); static auto PSMARTRESIZING = CConfigValue("master:smart_resizing"); -- cgit v1.2.3