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
This commit is contained in:
thejch 2024-03-18 19:52:52 -07:00 committed by GitHub
parent 7a31c954e5
commit e6532ba024
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 22 additions and 0 deletions

View file

@ -389,6 +389,8 @@ void CWindow::moveToWorkspace(int workspaceID) {
const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(m_iWorkspaceID); const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(m_iWorkspaceID);
setAnimationsToMove();
updateSpecialRenderData(); updateSpecialRenderData();
if (PWORKSPACE) { if (PWORKSPACE) {
@ -1147,3 +1149,10 @@ bool CWindow::visibleOnMonitor(CMonitor* pMonitor) {
return wlr_output_layout_intersects(g_pCompositor->m_sWLROutputLayout, pMonitor->output, wbox.pWlr()); 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;
}

View file

@ -419,6 +419,7 @@ class CWindow {
void insertWindowToGroup(CWindow* pWindow); void insertWindowToGroup(CWindow* pWindow);
void updateGroupOutputs(); void updateGroupOutputs();
void switchWithWindowInGroup(CWindow* pWindow); void switchWithWindowInGroup(CWindow* pWindow);
void setAnimationsToMove();
private: private:
// For hidden windows and stuff // For hidden windows and stuff

View file

@ -924,6 +924,8 @@ void CHyprDwindleLayout::moveWindowTo(CWindow* pWindow, const std::string& dir)
default: UNREACHABLE(); default: UNREACHABLE();
} }
pWindow->setAnimationsToMove();
onWindowRemovedTiling(pWindow); onWindowRemovedTiling(pWindow);
m_vOverrideFocalPoint = focalPoint; m_vOverrideFocalPoint = focalPoint;
@ -969,6 +971,9 @@ void CHyprDwindleLayout::switchWindows(CWindow* pWindow, CWindow* pWindow2) {
std::swap(pWindow2->m_iWorkspaceID, pWindow->m_iWorkspaceID); std::swap(pWindow2->m_iWorkspaceID, pWindow->m_iWorkspaceID);
} }
pWindow->setAnimationsToMove();
pWindow2->setAnimationsToMove();
// recalc the workspace // recalc the workspace
getMasterNodeOnWorkspace(PNODE->workspaceID)->recalcSizePosRecursive(); getMasterNodeOnWorkspace(PNODE->workspaceID)->recalcSizePosRecursive();

View file

@ -552,6 +552,8 @@ void IHyprLayout::moveActiveWindow(const Vector2D& delta, CWindow* pWindow) {
return; return;
} }
PWINDOW->setAnimationsToMove();
PWINDOW->m_vRealPosition = PWINDOW->m_vRealPosition.goal() + delta; PWINDOW->m_vRealPosition = PWINDOW->m_vRealPosition.goal() + delta;
g_pHyprRenderer->damageWindow(PWINDOW); g_pHyprRenderer->damageWindow(PWINDOW);

View file

@ -970,6 +970,8 @@ void CHyprMasterLayout::moveWindowTo(CWindow* pWindow, const std::string& dir) {
const auto PWINDOW2 = g_pCompositor->getWindowInDirection(pWindow, dir[0]); const auto PWINDOW2 = g_pCompositor->getWindowInDirection(pWindow, dir[0]);
pWindow->setAnimationsToMove();
if (pWindow->m_iWorkspaceID != PWINDOW2->m_iWorkspaceID) { if (pWindow->m_iWorkspaceID != PWINDOW2->m_iWorkspaceID) {
// if different monitors, send to monitor // if different monitors, send to monitor
onWindowRemovedTiling(pWindow); onWindowRemovedTiling(pWindow);
@ -1002,6 +1004,9 @@ void CHyprMasterLayout::switchWindows(CWindow* pWindow, CWindow* pWindow2) {
PNODE->pWindow = pWindow2; PNODE->pWindow = pWindow2;
PNODE2->pWindow = pWindow; PNODE2->pWindow = pWindow;
pWindow->setAnimationsToMove();
pWindow2->setAnimationsToMove();
recalculateMonitor(pWindow->m_iMonitorID); recalculateMonitor(pWindow->m_iMonitorID);
if (PNODE2->workspaceID != PNODE->workspaceID) if (PNODE2->workspaceID != PNODE->workspaceID)
recalculateMonitor(pWindow2->m_iMonitorID); recalculateMonitor(pWindow2->m_iMonitorID);