diff options
| author | Vaxry <43317083+vaxerski@users.noreply.github.com> | 2026-04-04 09:06:07 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-04-04 14:06:07 +0100 |
| commit | 29cf6264a29752de3ed74cacbac6b1d2dbf1ad55 (patch) | |
| tree | 2d052b77a54acadda94fc5b9825f8f18562ae640 /src | |
| parent | 43f7f683d0ac667f2a5273f5e9a3ec0fc0d999e1 (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.cpp | 15 | ||||
| -rw-r--r-- | src/managers/animation/AnimationManager.cpp | 7 |
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); |
