summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorthejch <66577496+thejch@users.noreply.github.com>2024-03-18 19:52:52 -0700
committerGitHub <noreply@github.com>2024-03-19 02:52:52 +0000
commite6532ba024762ba15423ae0a0935dfe4fb4196b1 (patch)
treee0b5ed767c2392da7c59783f9f8f101744356f07 /src
parent7a31c954e5962db07b1b83e8a7340c38e7988ab6 (diff)
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
Diffstat (limited to 'src')
-rw-r--r--src/Window.cpp9
-rw-r--r--src/Window.hpp1
-rw-r--r--src/layout/DwindleLayout.cpp5
-rw-r--r--src/layout/IHyprLayout.cpp2
-rw-r--r--src/layout/MasterLayout.cpp5
5 files changed, 22 insertions, 0 deletions
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);