diff --git a/src/Window.cpp b/src/Window.cpp index 59ad5a3b..8130f017 100644 --- a/src/Window.cpp +++ b/src/Window.cpp @@ -389,6 +389,8 @@ void CWindow::moveToWorkspace(int workspaceID) { const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(m_iWorkspaceID); + setAnimationsToMove(); + updateSpecialRenderData(); if (PWORKSPACE) { @@ -1147,3 +1149,10 @@ bool CWindow::visibleOnMonitor(CMonitor* pMonitor) { return wlr_output_layout_intersects(g_pCompositor->m_sWLROutputLayout, pMonitor->output, wbox.pWlr()); } + +void CWindow::setAnimationsToMove() { + auto* const PANIMCFG = g_pConfigManager->getAnimationPropertyConfig("windowsMove"); + m_vRealPosition.setConfig(PANIMCFG); + m_vRealSize.setConfig(PANIMCFG); + m_bAnimatingIn = false; +} diff --git a/src/Window.hpp b/src/Window.hpp index 11bd86c8..8350e197 100644 --- a/src/Window.hpp +++ b/src/Window.hpp @@ -419,6 +419,7 @@ class CWindow { void insertWindowToGroup(CWindow* pWindow); void updateGroupOutputs(); void switchWithWindowInGroup(CWindow* pWindow); + void setAnimationsToMove(); private: // For hidden windows and stuff 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);