From 0055efc4f1e44b440cb5649bece2b6358d01f24a Mon Sep 17 00:00:00 2001 From: vaxerski <43317083+vaxerski@users.noreply.github.com> Date: Tue, 31 May 2022 14:01:00 +0200 Subject: Added a special workspace --- src/layout/DwindleLayout.cpp | 38 +++++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) (limited to 'src/layout/DwindleLayout.cpp') diff --git a/src/layout/DwindleLayout.cpp b/src/layout/DwindleLayout.cpp index 59429688..8659367e 100644 --- a/src/layout/DwindleLayout.cpp +++ b/src/layout/DwindleLayout.cpp @@ -160,10 +160,20 @@ void CHyprDwindleLayout::applyNodeDataToWindow(SDwindleNodeData* pNode) { } } - PWINDOW->m_vRealSize = calcSize; - PWINDOW->m_vRealPosition = calcPos; + const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(PWINDOW->m_iWorkspaceID); - g_pXWaylandManager->setWindowSize(PWINDOW, calcSize); + if (PWORKSPACE->m_bIsSpecialWorkspace) { + // if special, we adjust the coords a bit + PWINDOW->m_vRealPosition = calcPos + (calcSize - calcSize * 0.8f) / 2.f; + PWINDOW->m_vRealSize = calcSize * 0.8f; + + g_pXWaylandManager->setWindowSize(PWINDOW, calcSize * 0.8f); + } else { + PWINDOW->m_vRealSize = calcSize; + PWINDOW->m_vRealPosition = calcPos; + + g_pXWaylandManager->setWindowSize(PWINDOW, calcSize); + } } void CHyprDwindleLayout::onWindowCreated(CWindow* pWindow) { @@ -184,7 +194,7 @@ void CHyprDwindleLayout::onWindowCreated(CWindow* pWindow) { SDwindleNodeData* OPENINGON; const auto MONFROMCURSOR = g_pCompositor->getMonitorFromCursor(); - if (PMONITOR->ID == MONFROMCURSOR->ID && PNODE->workspaceID == PMONITOR->activeWorkspace) { + if (PMONITOR->ID == MONFROMCURSOR->ID && (PNODE->workspaceID == PMONITOR->activeWorkspace || (PNODE->workspaceID == SPECIAL_WORKSPACE_ID && PMONITOR->specialWorkspaceOpen))) { OPENINGON = getNodeFromWindow(g_pCompositor->vectorToWindowTiled(g_pInputManager->getMouseCoordsInternal())); // happens on reserved area @@ -196,6 +206,11 @@ void CHyprDwindleLayout::onWindowCreated(CWindow* pWindow) { Debug::log(LOG, "OPENINGON: %x, Workspace: %i, Monitor: %i", OPENINGON, PNODE->workspaceID, PMONITOR->ID); + if (OPENINGON->workspaceID != PNODE->workspaceID) { + // special workspace handling + OPENINGON = getFirstNodeOnWorkspace(PNODE->workspaceID); + } + // if it's the first, it's easy. Make it fullscreen. if (!OPENINGON || OPENINGON->pWindow == pWindow) { PNODE->position = PMONITOR->vecPosition + PMONITOR->vecReservedTopLeft; @@ -356,8 +371,21 @@ void CHyprDwindleLayout::recalculateMonitor(const int& monid) { const auto PMONITOR = g_pCompositor->getMonitorFromID(monid); const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(PMONITOR->activeWorkspace); + if (!PWORKSPACE) + return; + + if (PMONITOR->specialWorkspaceOpen) { + const auto TOPNODE = getMasterNodeOnWorkspace(SPECIAL_WORKSPACE_ID); + + if (TOPNODE && PMONITOR) { + TOPNODE->position = PMONITOR->vecPosition + PMONITOR->vecReservedTopLeft; + TOPNODE->size = PMONITOR->vecSize - PMONITOR->vecReservedTopLeft - PMONITOR->vecReservedBottomRight; + TOPNODE->recalcSizePosRecursive(); + } + } + // Ignore any recalc events if we have a fullscreen window. - if (!PWORKSPACE || PWORKSPACE->m_bHasFullscreenWindow) + if (PWORKSPACE->m_bHasFullscreenWindow) return; const auto TOPNODE = getMasterNodeOnWorkspace(PMONITOR->activeWorkspace); -- cgit v1.2.3