master: add option to keep master window position (#9537)

This commit is contained in:
nyx
2025-03-06 17:06:05 -05:00
committed by GitHub
parent 4435f5c546
commit 7055d0c138
3 changed files with 23 additions and 2 deletions

View File

@@ -1770,4 +1770,10 @@ inline static const std::vector<SConfigOptionDescription> CONFIG_OPTIONS = {
.type = CONFIG_OPTION_BOOL,
.data = SConfigOptionDescription::SBoolData{false},
},
SConfigOptionDescription{
.value = "master:always_keep_position",
.description = "whether to keep the master window in its configured position when there are no slave windows",
.type = CONFIG_OPTION_BOOL,
.data = SConfigOptionDescription::SBoolData{false},
},
};

View File

@@ -562,6 +562,7 @@ CConfigManager::CConfigManager() {
registerConfigVar("master:allow_small_split", Hyprlang::INT{0});
registerConfigVar("master:smart_resizing", Hyprlang::INT{1});
registerConfigVar("master:drop_at_cursor", Hyprlang::INT{1});
registerConfigVar("master:always_keep_position", Hyprlang::INT{0});
registerConfigVar("animations:enabled", Hyprlang::INT{1});
registerConfigVar("animations:first_launch_animation", Hyprlang::INT{1});

View File

@@ -374,8 +374,22 @@ void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) {
// compute placement of master window(s)
if (WINDOWS == 1 && !centerMasterWindow) {
PMASTERNODE->size = WSSIZE;
PMASTERNODE->position = WSPOS;
static auto PALWAYSKEEPPOSITION = CConfigValue<Hyprlang::INT>("master:always_keep_position");
if (*PALWAYSKEEPPOSITION) {
const float WIDTH = WSSIZE.x * PMASTERNODE->percMaster;
float nextX = 0;
if (orientation == ORIENTATION_RIGHT)
nextX = WSSIZE.x - WIDTH;
else if (orientation == ORIENTATION_CENTER)
nextX = (WSSIZE.x - WIDTH) / 2;
PMASTERNODE->size = Vector2D(WIDTH, WSSIZE.y);
PMASTERNODE->position = WSPOS + Vector2D((double)nextX, 0.0);
} else {
PMASTERNODE->size = WSSIZE;
PMASTERNODE->position = WSPOS;
}
applyNodeDataToWindow(PMASTERNODE);
return;