mirror of
https://github.com/hyprwm/Hyprland
synced 2024-11-22 20:05:58 +01: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:
parent
9ae0c47a21
commit
ef7ac53e99
1 changed files with 26 additions and 7 deletions
|
@ -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");
|
||||
|
||||
|
|
Loading…
Reference in a new issue