summaryrefslogtreecommitdiff
path: root/src/layout/MasterLayout.cpp
diff options
context:
space:
mode:
authorvaxerski <43317083+vaxerski@users.noreply.github.com>2022-08-05 18:10:59 +0200
committervaxerski <43317083+vaxerski@users.noreply.github.com>2022-08-05 18:10:59 +0200
commitcd37a1533e0e86fffdd333e18bab0bb730c1dc25 (patch)
treefb32becc5c231a19b80fb911a8d60a1ce41869b1 /src/layout/MasterLayout.cpp
parent575434f1a4cfce30cf89b62e5f1cce4b3c326b6e (diff)
reject tiling windows that do not meet the max size requirement
Diffstat (limited to 'src/layout/MasterLayout.cpp')
-rw-r--r--src/layout/MasterLayout.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/layout/MasterLayout.cpp b/src/layout/MasterLayout.cpp
index b7f03c3d..1f647c63 100644
--- a/src/layout/MasterLayout.cpp
+++ b/src/layout/MasterLayout.cpp
@@ -39,6 +39,8 @@ void CHyprMasterLayout::onWindowCreatedTiling(CWindow* pWindow) {
static auto *const PNEWTOP = &g_pConfigManager->getConfigValuePtr("master:new_on_top")->intValue;
+ const auto PMONITOR = g_pCompositor->getMonitorFromID(pWindow->m_iMonitorID);
+
const auto PNODE = *PNEWTOP ? &m_lMasterNodesData.emplace_front() : &m_lMasterNodesData.emplace_back();
PNODE->workspaceID = pWindow->m_iWorkspaceID;
@@ -60,8 +62,26 @@ void CHyprMasterLayout::onWindowCreatedTiling(CWindow* pWindow) {
PNODE->isMaster = true;
PNODE->percMaster = lastSplitPercent;
+
+ // first, check if it isn't too big.
+ if (const auto MAXSIZE = g_pXWaylandManager->getMaxSizeForWindow(pWindow); MAXSIZE.x < PMONITOR->vecSize.x * lastSplitPercent || MAXSIZE.y < PMONITOR->vecSize.y) {
+ // we can't continue. make it floating.
+ pWindow->m_bIsFloating = true;
+ m_lMasterNodesData.remove(*PNODE);
+ g_pLayoutManager->getCurrentLayout()->onWindowCreatedFloating(pWindow);
+ return;
+ }
} else {
PNODE->isMaster = false;
+
+ // first, check if it isn't too big.
+ if (const auto MAXSIZE = g_pXWaylandManager->getMaxSizeForWindow(pWindow); MAXSIZE.x < PMONITOR->vecSize.x * (1 - lastSplitPercent) || MAXSIZE.y < PMONITOR->vecSize.y * (1.f / (WINDOWSONWORKSPACE - 1))) {
+ // we can't continue. make it floating.
+ pWindow->m_bIsFloating = true;
+ m_lMasterNodesData.remove(*PNODE);
+ g_pLayoutManager->getCurrentLayout()->onWindowCreatedFloating(pWindow);
+ return;
+ }
}
// recalc