summaryrefslogtreecommitdiff
path: root/src/layout/MasterLayout.cpp
diff options
context:
space:
mode:
authorvaxerski <vaxry@vaxry.net>2024-02-28 11:45:43 +0000
committervaxerski <vaxry@vaxry.net>2024-02-28 11:45:43 +0000
commitf4f3aa2e505ca1b22688fb4a32f31c4bfb851dd0 (patch)
tree98c8547e45a04445b24b2aa90b0a3e0d302a0cd6 /src/layout/MasterLayout.cpp
parentc198d744b77f272c2fc187eb6d431580a99ab6c3 (diff)
layout: add size prediction for initial xdg commits
fixes #4022
Diffstat (limited to 'src/layout/MasterLayout.cpp')
-rw-r--r--src/layout/MasterLayout.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/layout/MasterLayout.cpp b/src/layout/MasterLayout.cpp
index 6a3cd492..1a488b0d 100644
--- a/src/layout/MasterLayout.cpp
+++ b/src/layout/MasterLayout.cpp
@@ -1459,6 +1459,33 @@ void CHyprMasterLayout::replaceWindowDataWith(CWindow* from, CWindow* to) {
applyNodeDataToWindow(PNODE);
}
+Vector2D CHyprMasterLayout::predictSizeForNewWindow() {
+ static auto* const PNEWISMASTER = (Hyprlang::INT* const*)g_pConfigManager->getConfigValuePtr("master:new_is_master");
+
+ if (!g_pCompositor->m_pLastMonitor)
+ return {};
+
+ const int NODES = getNodesOnWorkspace(g_pCompositor->m_pLastMonitor->activeWorkspace);
+
+ if (NODES <= 0)
+ return g_pCompositor->m_pLastMonitor->vecSize;
+
+ const auto MASTER = getMasterNodeOnWorkspace(g_pCompositor->m_pLastMonitor->activeWorkspace);
+ if (!MASTER) // wtf
+ return {};
+
+ if (*PNEWISMASTER) {
+ return MASTER->size;
+ } else {
+ const auto SLAVES = NODES - getMastersOnWorkspace(g_pCompositor->m_pLastMonitor->activeWorkspace);
+
+ // TODO: make this better
+ return {g_pCompositor->m_pLastMonitor->vecSize.x - MASTER->size.x, g_pCompositor->m_pLastMonitor->vecSize.y / (SLAVES + 1)};
+ }
+
+ return {};
+}
+
void CHyprMasterLayout::onEnable() {
for (auto& w : g_pCompositor->m_vWindows) {
if (w->m_bIsFloating || !w->m_bIsMapped || w->isHidden())