summaryrefslogtreecommitdiff
path: root/src/layout/MasterLayout.cpp
diff options
context:
space:
mode:
authornyx <nnyyxxxx@protonmail.com>2025-03-06 17:06:05 -0500
committerGitHub <noreply@github.com>2025-03-06 23:06:05 +0100
commit7055d0c138965679bb88ed4db60e2698db66bbf9 (patch)
tree4bf0ecb4b57e4e8fb294ba5c755ec57628826580 /src/layout/MasterLayout.cpp
parent4435f5c5463978ea689e6b4aa30e455e061a80ad (diff)
master: add option to keep master window position (#9537)
Diffstat (limited to 'src/layout/MasterLayout.cpp')
-rw-r--r--src/layout/MasterLayout.cpp18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/layout/MasterLayout.cpp b/src/layout/MasterLayout.cpp
index a429843f..59a5b14f 100644
--- a/src/layout/MasterLayout.cpp
+++ b/src/layout/MasterLayout.cpp
@@ -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;