summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorVaxry <43317083+vaxerski@users.noreply.github.com>2026-04-04 09:06:07 -0400
committerGitHub <noreply@github.com>2026-04-04 14:06:07 +0100
commit29cf6264a29752de3ed74cacbac6b1d2dbf1ad55 (patch)
tree2d052b77a54acadda94fc5b9825f8f18562ae640 /src
parent43f7f683d0ac667f2a5273f5e9a3ec0fc0d999e1 (diff)
desktop/window: reduce window deco updates (#13980)
AVARDAMAGE_ENTIRE doesn't mean the geometry changed, so no point in an expensive update
Diffstat (limited to 'src')
-rw-r--r--src/desktop/view/Window.cpp15
-rw-r--r--src/managers/animation/AnimationManager.cpp7
2 files changed, 14 insertions, 8 deletions
diff --git a/src/desktop/view/Window.cpp b/src/desktop/view/Window.cpp
index 2a388d68..e9f22021 100644
--- a/src/desktop/view/Window.cpp
+++ b/src/desktop/view/Window.cpp
@@ -658,12 +658,21 @@ void CWindow::onMap() {
false);
m_realSize->setUpdateCallback([this](auto) {
- if (m_isMapped)
- m_events.resize.emit();
+ if (!m_isMapped)
+ return;
+
+ updateWindowDecos();
+
+ m_events.resize.emit();
});
m_realPosition->setUpdateCallback([this](auto) {
- if (m_isMapped && m_monitor != m_prevMonitor) {
+ if (!m_isMapped)
+ return;
+
+ updateWindowDecos();
+
+ if (m_monitor != m_prevMonitor) {
m_prevMonitor = m_monitor;
m_events.monitorChanged.emit();
}
diff --git a/src/managers/animation/AnimationManager.cpp b/src/managers/animation/AnimationManager.cpp
index bb7e9930..5c52a7a5 100644
--- a/src/managers/animation/AnimationManager.cpp
+++ b/src/managers/animation/AnimationManager.cpp
@@ -150,16 +150,13 @@ static void handleUpdate(CAnimatedVariable<VarType>& av, bool warp) {
switch (av.m_Context.eDamagePolicy) {
case AVARDAMAGE_ENTIRE: {
- if (PWINDOW) {
- PWINDOW->updateWindowDecos();
+ if (PWINDOW)
g_pHyprRenderer->damageWindow(PWINDOW);
- } else if (PWORKSPACE) {
+ else if (PWORKSPACE) {
for (auto const& w : g_pCompositor->m_windows) {
if (!validMapped(w) || w->m_workspace != PWORKSPACE)
continue;
- w->updateWindowDecos();
-
// damage any workspace window that is on any monitor
if (!w->m_pinned)
g_pHyprRenderer->damageWindow(w);