mirror of
https://github.com/hyprwm/Hyprland
synced 2024-12-04 20:25:59 +01:00
master: make center ignore reserved areas (#8625)
This commit is contained in:
parent
6d7544458d
commit
10a9fec7fc
3 changed files with 14 additions and 6 deletions
|
@ -1596,6 +1596,12 @@ inline static const std::vector<SConfigOptionDescription> CONFIG_OPTIONS = {
|
||||||
.type = CONFIG_OPTION_BOOL,
|
.type = CONFIG_OPTION_BOOL,
|
||||||
.data = SConfigOptionDescription::SBoolData{false},
|
.data = SConfigOptionDescription::SBoolData{false},
|
||||||
},
|
},
|
||||||
|
SConfigOptionDescription{
|
||||||
|
.value = "master:center_ignores_reserved",
|
||||||
|
.description = "centers the master window on monitor ignoring reserved areas",
|
||||||
|
.type = CONFIG_OPTION_BOOL,
|
||||||
|
.data = SConfigOptionDescription::SBoolData{false},
|
||||||
|
},
|
||||||
SConfigOptionDescription{
|
SConfigOptionDescription{
|
||||||
.value = "master:smart_resizing",
|
.value = "master:smart_resizing",
|
||||||
.description =
|
.description =
|
||||||
|
|
|
@ -470,6 +470,7 @@ CConfigManager::CConfigManager() {
|
||||||
m_pConfig->addConfigValue("master:mfact", {0.55f});
|
m_pConfig->addConfigValue("master:mfact", {0.55f});
|
||||||
m_pConfig->addConfigValue("master:new_status", {"slave"});
|
m_pConfig->addConfigValue("master:new_status", {"slave"});
|
||||||
m_pConfig->addConfigValue("master:always_center_master", Hyprlang::INT{0});
|
m_pConfig->addConfigValue("master:always_center_master", Hyprlang::INT{0});
|
||||||
|
m_pConfig->addConfigValue("master:center_ignores_reserved", Hyprlang::INT{0});
|
||||||
m_pConfig->addConfigValue("master:new_on_active", {"none"});
|
m_pConfig->addConfigValue("master:new_on_active", {"none"});
|
||||||
m_pConfig->addConfigValue("master:new_on_top", Hyprlang::INT{0});
|
m_pConfig->addConfigValue("master:new_on_top", Hyprlang::INT{0});
|
||||||
m_pConfig->addConfigValue("master:orientation", {"left"});
|
m_pConfig->addConfigValue("master:orientation", {"left"});
|
||||||
|
|
|
@ -328,6 +328,7 @@ void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) {
|
||||||
eOrientation orientation = getDynamicOrientation(pWorkspace);
|
eOrientation orientation = getDynamicOrientation(pWorkspace);
|
||||||
bool centerMasterWindow = false;
|
bool centerMasterWindow = false;
|
||||||
static auto ALWAYSCENTER = CConfigValue<Hyprlang::INT>("master:always_center_master");
|
static auto ALWAYSCENTER = CConfigValue<Hyprlang::INT>("master:always_center_master");
|
||||||
|
static auto PIGNORERESERVED = CConfigValue<Hyprlang::INT>("master:center_ignores_reserved");
|
||||||
static auto PSMARTRESIZING = CConfigValue<Hyprlang::INT>("master:smart_resizing");
|
static auto PSMARTRESIZING = CConfigValue<Hyprlang::INT>("master:smart_resizing");
|
||||||
|
|
||||||
const auto MASTERS = getMastersOnWorkspace(pWorkspace->m_iID);
|
const auto MASTERS = getMastersOnWorkspace(pWorkspace->m_iID);
|
||||||
|
@ -402,7 +403,7 @@ void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) {
|
||||||
nextX += WIDTH;
|
nextX += WIDTH;
|
||||||
}
|
}
|
||||||
} else { // orientation left, right or center
|
} else { // orientation left, right or center
|
||||||
float WIDTH = WSSIZE.x;
|
float WIDTH = *PIGNORERESERVED && centerMasterWindow ? PMONITOR->vecSize.x : WSSIZE.x;
|
||||||
float heightLeft = WSSIZE.y;
|
float heightLeft = WSSIZE.y;
|
||||||
int mastersLeft = MASTERS;
|
int mastersLeft = MASTERS;
|
||||||
float nextX = 0;
|
float nextX = 0;
|
||||||
|
@ -414,7 +415,7 @@ void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) {
|
||||||
if (orientation == ORIENTATION_RIGHT) {
|
if (orientation == ORIENTATION_RIGHT) {
|
||||||
nextX = WSSIZE.x - WIDTH;
|
nextX = WSSIZE.x - WIDTH;
|
||||||
} else if (centerMasterWindow) {
|
} else if (centerMasterWindow) {
|
||||||
nextX = (WSSIZE.x - WIDTH) / 2;
|
nextX = ((*PIGNORERESERVED && centerMasterWindow ? PMONITOR->vecSize.x : WSSIZE.x) - WIDTH) / 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto& nd : m_lMasterNodesData) {
|
for (auto& nd : m_lMasterNodesData) {
|
||||||
|
@ -431,7 +432,7 @@ void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) {
|
||||||
}
|
}
|
||||||
|
|
||||||
nd.size = Vector2D(WIDTH, HEIGHT);
|
nd.size = Vector2D(WIDTH, HEIGHT);
|
||||||
nd.position = WSPOS + Vector2D(nextX, nextY);
|
nd.position = (*PIGNORERESERVED && centerMasterWindow ? PMONITOR->vecPosition : WSPOS) + Vector2D(nextX, nextY);
|
||||||
applyNodeDataToWindow(&nd);
|
applyNodeDataToWindow(&nd);
|
||||||
|
|
||||||
mastersLeft--;
|
mastersLeft--;
|
||||||
|
@ -506,7 +507,7 @@ void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) {
|
||||||
nextY += HEIGHT;
|
nextY += HEIGHT;
|
||||||
}
|
}
|
||||||
} else { // slaves for centered master window(s)
|
} else { // slaves for centered master window(s)
|
||||||
const float WIDTH = (WSSIZE.x - PMASTERNODE->size.x) / 2.0;
|
const float WIDTH = ((*PIGNORERESERVED ? PMONITOR->vecSize.x : WSSIZE.x) - PMASTERNODE->size.x) / 2.0;
|
||||||
float heightLeft = 0;
|
float heightLeft = 0;
|
||||||
float heightLeftL = WSSIZE.y;
|
float heightLeftL = WSSIZE.y;
|
||||||
float heightLeftR = WSSIZE.y;
|
float heightLeftR = WSSIZE.y;
|
||||||
|
@ -543,7 +544,7 @@ void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) {
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (onRight) {
|
if (onRight) {
|
||||||
nextX = WIDTH + PMASTERNODE->size.x;
|
nextX = WIDTH + PMASTERNODE->size.x - (*PIGNORERESERVED ? PMONITOR->vecReservedTopLeft.x : 0);
|
||||||
nextY = nextYR;
|
nextY = nextYR;
|
||||||
heightLeft = heightLeftR;
|
heightLeft = heightLeftR;
|
||||||
slavesLeft = slavesLeftR;
|
slavesLeft = slavesLeftR;
|
||||||
|
@ -568,7 +569,7 @@ void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
nd.size = Vector2D(WIDTH, HEIGHT);
|
nd.size = Vector2D(*PIGNORERESERVED ? (WIDTH - (onRight ? PMONITOR->vecReservedBottomRight.x : PMONITOR->vecReservedTopLeft.x)) : WIDTH, HEIGHT);
|
||||||
nd.position = WSPOS + Vector2D(nextX, nextY);
|
nd.position = WSPOS + Vector2D(nextX, nextY);
|
||||||
applyNodeDataToWindow(&nd);
|
applyNodeDataToWindow(&nd);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue