mirror of
https://github.com/hyprwm/Hyprland.git
synced 2025-08-05 22:51:58 -07:00
master: Make master workspace orientation rule dynamic (#5339)
* make master workspace orientation rule dynamic * fix rebase * fix special ws resizing * style
This commit is contained in:
@@ -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<Hyprlang::INT>("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<Hyprlang::INT>("master:always_center_master");
|
||||
static auto PSMARTRESIZING = CConfigValue<Hyprlang::INT>("master:smart_resizing");
|
||||
|
||||
|
Reference in New Issue
Block a user