summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorkhushal-solves <khushal.solves@gmail.com>2024-12-30 04:41:16 +0530
committerGitHub <noreply@github.com>2024-12-29 23:11:16 +0000
commitfde569db6519b613369c863d192c67dedb386910 (patch)
tree0b5dca0c1a40c05fe91a0e53a752550c5a8d6be8 /src
parent5b37d53992f3f9bfd7f5483a85f99adf7ac104f3 (diff)
master: replace always_center_master with slave_count_for_center_master (#8871)
- Replaced boolean config parameter `always_center_master` to an integer value `slave_count_for_center_master` for more control on when to center master window. - Also updated configuration parameter, type, description and related internal variable. New description: **when using orientation=center, make the master window centered only when at least this many slave windows are open. (Set 0 to always_center_master)** This effects center orientation of master layout. Now, user can control when the master window would be centered
Diffstat (limited to 'src')
-rw-r--r--src/config/ConfigDescriptions.hpp8
-rw-r--r--src/config/ConfigManager.cpp2
-rw-r--r--src/layout/MasterLayout.cpp28
3 files changed, 19 insertions, 19 deletions
diff --git a/src/config/ConfigDescriptions.hpp b/src/config/ConfigDescriptions.hpp
index 6792a763..e1c9cb46 100644
--- a/src/config/ConfigDescriptions.hpp
+++ b/src/config/ConfigDescriptions.hpp
@@ -1603,10 +1603,10 @@ inline static const std::vector<SConfigOptionDescription> CONFIG_OPTIONS = {
.data = SConfigOptionDescription::SBoolData{true},
},
SConfigOptionDescription{
- .value = "master:always_center_master",
- .description = "when using orientation=center, keep the master window centered, even when it is the only window in the workspace.",
- .type = CONFIG_OPTION_BOOL,
- .data = SConfigOptionDescription::SBoolData{false},
+ .value = "master:slave_count_for_center_master",
+ .description = "when using orientation=center, make the master window centered only when at least this many slave windows are open. (Set 0 to always_center_master)",
+ .type = CONFIG_OPTION_INT,
+ .data = SConfigOptionDescription::SRangeData{2, 0, 10}, //##TODO RANGE?
},
SConfigOptionDescription{
.value = "master:center_ignores_reserved",
diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp
index 65f9cb13..0b8e68f6 100644
--- a/src/config/ConfigManager.cpp
+++ b/src/config/ConfigManager.cpp
@@ -477,7 +477,7 @@ CConfigManager::CConfigManager() {
m_pConfig->addConfigValue("master:special_scale_factor", {1.f});
m_pConfig->addConfigValue("master:mfact", {0.55f});
m_pConfig->addConfigValue("master:new_status", {"slave"});
- m_pConfig->addConfigValue("master:always_center_master", Hyprlang::INT{0});
+ m_pConfig->addConfigValue("master:slave_count_for_center_master", Hyprlang::INT{2});
m_pConfig->addConfigValue("master:center_ignores_reserved", Hyprlang::INT{0});
m_pConfig->addConfigValue("master:new_on_active", {"none"});
m_pConfig->addConfigValue("master:new_on_top", Hyprlang::INT{0});
diff --git a/src/layout/MasterLayout.cpp b/src/layout/MasterLayout.cpp
index f4730892..05a2a707 100644
--- a/src/layout/MasterLayout.cpp
+++ b/src/layout/MasterLayout.cpp
@@ -325,11 +325,11 @@ void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) {
if (!PMASTERNODE)
return;
- eOrientation orientation = getDynamicOrientation(pWorkspace);
- bool centerMasterWindow = false;
- 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");
+ eOrientation orientation = getDynamicOrientation(pWorkspace);
+ bool centerMasterWindow = false;
+ static auto SLAVECOUNTFORCENTER = CConfigValue<Hyprlang::INT>("master:slave_count_for_center_master");
+ static auto PIGNORERESERVED = CConfigValue<Hyprlang::INT>("master:center_ignores_reserved");
+ static auto PSMARTRESIZING = CConfigValue<Hyprlang::INT>("master:smart_resizing");
const auto MASTERS = getMastersOnWorkspace(pWorkspace->m_iID);
const auto WINDOWS = getNodesOnWorkspace(pWorkspace->m_iID);
@@ -338,7 +338,7 @@ void CHyprMasterLayout::calculateWorkspace(PHLWORKSPACE pWorkspace) {
const auto WSPOS = PMONITOR->vecPosition + PMONITOR->vecReservedTopLeft;
if (orientation == ORIENTATION_CENTER) {
- if (STACKWINDOWS >= 2 || (*ALWAYSCENTER == 1)) {
+ if (STACKWINDOWS >= *SLAVECOUNTFORCENTER) {
centerMasterWindow = true;
} else {
orientation = ORIENTATION_LEFT;
@@ -708,13 +708,9 @@ void CHyprMasterLayout::resizeActiveWindow(const Vector2D& pixResize, eRectCorne
return;
}
- const auto PMONITOR = PWINDOW->m_pMonitor.lock();
- static auto ALWAYSCENTER = CConfigValue<Hyprlang::INT>("master:always_center_master");
- static auto PSMARTRESIZING = CConfigValue<Hyprlang::INT>("master:smart_resizing");
-
- eOrientation orientation = getDynamicOrientation(PWINDOW->m_pWorkspace);
- bool centered = orientation == ORIENTATION_CENTER && (*ALWAYSCENTER == 1);
- double delta = 0;
+ const auto PMONITOR = PWINDOW->m_pMonitor.lock();
+ static auto SLAVECOUNTFORCENTER = CConfigValue<Hyprlang::INT>("master:slave_count_for_center_master");
+ static auto PSMARTRESIZING = CConfigValue<Hyprlang::INT>("master:smart_resizing");
const bool DISPLAYBOTTOM = STICKS(PWINDOW->m_vPosition.y + PWINDOW->m_vSize.y, PMONITOR->vecPosition.y + PMONITOR->vecSize.y - PMONITOR->vecReservedBottomRight.y);
const bool DISPLAYRIGHT = STICKS(PWINDOW->m_vPosition.x + PWINDOW->m_vSize.x, PMONITOR->vecPosition.x + PMONITOR->vecSize.x - PMONITOR->vecReservedBottomRight.x);
@@ -729,6 +725,10 @@ void CHyprMasterLayout::resizeActiveWindow(const Vector2D& pixResize, eRectCorne
const auto WINDOWS = getNodesOnWorkspace(PNODE->workspaceID);
const auto STACKWINDOWS = WINDOWS - MASTERS;
+ eOrientation orientation = getDynamicOrientation(PWINDOW->m_pWorkspace);
+ bool centered = orientation == ORIENTATION_CENTER && (STACKWINDOWS >= *SLAVECOUNTFORCENTER);
+ double delta = 0;
+
if (getNodesOnWorkspace(PWINDOW->workspaceID()) == 1 && !centered)
return;
@@ -741,7 +741,7 @@ void CHyprMasterLayout::resizeActiveWindow(const Vector2D& pixResize, eRectCorne
case ORIENTATION_TOP: delta = pixResize.y / PMONITOR->vecSize.y; break;
case ORIENTATION_CENTER:
delta = pixResize.x / PMONITOR->vecSize.x;
- if (WINDOWS > 2 || *ALWAYSCENTER) {
+ if (STACKWINDOWS >= *SLAVECOUNTFORCENTER) {
if (!NONE || !PNODE->isMaster)
delta *= 2;
if ((!PNODE->isMaster && DISPLAYLEFT) || (PNODE->isMaster && LEFT && *PSMARTRESIZING))