From e6532ba024762ba15423ae0a0935dfe4fb4196b1 Mon Sep 17 00:00:00 2001 From: thejch <66577496+thejch@users.noreply.github.com> Date: Mon, 18 Mar 2024 19:52:52 -0700 Subject: animations: Fix incorrect animation when manually moving a window when its being created (#5141) * fix incorrect rendering when manually moving a window when its being created * add setAnimationsToMove --- src/layout/DwindleLayout.cpp | 5 +++++ src/layout/IHyprLayout.cpp | 2 ++ src/layout/MasterLayout.cpp | 5 +++++ 3 files changed, 12 insertions(+) (limited to 'src/layout') diff --git a/src/layout/DwindleLayout.cpp b/src/layout/DwindleLayout.cpp index 1ce6aa82..c34f04cc 100644 --- a/src/layout/DwindleLayout.cpp +++ b/src/layout/DwindleLayout.cpp @@ -924,6 +924,8 @@ void CHyprDwindleLayout::moveWindowTo(CWindow* pWindow, const std::string& dir) default: UNREACHABLE(); } + pWindow->setAnimationsToMove(); + onWindowRemovedTiling(pWindow); m_vOverrideFocalPoint = focalPoint; @@ -969,6 +971,9 @@ void CHyprDwindleLayout::switchWindows(CWindow* pWindow, CWindow* pWindow2) { std::swap(pWindow2->m_iWorkspaceID, pWindow->m_iWorkspaceID); } + pWindow->setAnimationsToMove(); + pWindow2->setAnimationsToMove(); + // recalc the workspace getMasterNodeOnWorkspace(PNODE->workspaceID)->recalcSizePosRecursive(); diff --git a/src/layout/IHyprLayout.cpp b/src/layout/IHyprLayout.cpp index f992899d..c8c00183 100644 --- a/src/layout/IHyprLayout.cpp +++ b/src/layout/IHyprLayout.cpp @@ -552,6 +552,8 @@ void IHyprLayout::moveActiveWindow(const Vector2D& delta, CWindow* pWindow) { return; } + PWINDOW->setAnimationsToMove(); + PWINDOW->m_vRealPosition = PWINDOW->m_vRealPosition.goal() + delta; g_pHyprRenderer->damageWindow(PWINDOW); diff --git a/src/layout/MasterLayout.cpp b/src/layout/MasterLayout.cpp index 7919d50f..1c6be8d6 100644 --- a/src/layout/MasterLayout.cpp +++ b/src/layout/MasterLayout.cpp @@ -970,6 +970,8 @@ void CHyprMasterLayout::moveWindowTo(CWindow* pWindow, const std::string& dir) { const auto PWINDOW2 = g_pCompositor->getWindowInDirection(pWindow, dir[0]); + pWindow->setAnimationsToMove(); + if (pWindow->m_iWorkspaceID != PWINDOW2->m_iWorkspaceID) { // if different monitors, send to monitor onWindowRemovedTiling(pWindow); @@ -1002,6 +1004,9 @@ void CHyprMasterLayout::switchWindows(CWindow* pWindow, CWindow* pWindow2) { PNODE->pWindow = pWindow2; PNODE2->pWindow = pWindow; + pWindow->setAnimationsToMove(); + pWindow2->setAnimationsToMove(); + recalculateMonitor(pWindow->m_iMonitorID); if (PNODE2->workspaceID != PNODE->workspaceID) recalculateMonitor(pWindow2->m_iMonitorID); -- cgit v1.2.3