From 057695bc3f7de5e8841c15252fc51029590895e4 Mon Sep 17 00:00:00 2001 From: Vaxry <43317083+vaxerski@users.noreply.github.com> Date: Wed, 22 Oct 2025 11:32:42 +0100 Subject: [PATCH] desktopAnimationMgr: don't set fade 0 for members of a fs group (#12091) fixes a flash of opacity that shouldnt be there --- src/desktop/Window.cpp | 10 ++++++++++ src/desktop/Window.hpp | 1 + src/managers/animation/DesktopAnimationManager.cpp | 9 +++++++-- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp index b2b43ec1..2d3d4db9 100644 --- a/src/desktop/Window.cpp +++ b/src/desktop/Window.cpp @@ -1037,6 +1037,16 @@ PHLWINDOW CWindow::getGroupWindowByIndex(int index) { return curr; } +bool CWindow::hasInGroup(PHLWINDOW w) { + PHLWINDOW curr = m_groupData.pNextWindow.lock(); + while (curr && curr != m_self) { + if (curr == w) + return true; + curr = curr->m_groupData.pNextWindow.lock(); + } + return false; +} + void CWindow::setGroupCurrent(PHLWINDOW pWindow) { PHLWINDOW curr = m_groupData.pNextWindow.lock(); bool isMember = false; diff --git a/src/desktop/Window.hpp b/src/desktop/Window.hpp index e08dd7af..0a7e207c 100644 --- a/src/desktop/Window.hpp +++ b/src/desktop/Window.hpp @@ -379,6 +379,7 @@ class CWindow { PHLWINDOW getGroupCurrent(); PHLWINDOW getGroupPrevious(); PHLWINDOW getGroupWindowByIndex(int); + bool hasInGroup(PHLWINDOW); int getGroupSize(); bool canBeGroupedInto(PHLWINDOW pWindow); void setGroupCurrent(PHLWINDOW pWindow); diff --git a/src/managers/animation/DesktopAnimationManager.cpp b/src/managers/animation/DesktopAnimationManager.cpp index 88f0c826..f156dfa9 100644 --- a/src/managers/animation/DesktopAnimationManager.cpp +++ b/src/managers/animation/DesktopAnimationManager.cpp @@ -459,6 +459,8 @@ void CDesktopAnimationManager::setFullscreenFadeAnimation(PHLWORKSPACE ws, eAnim const auto FULLSCREEN = type == ANIMATION_TYPE_IN; + const auto FSWINDOW = ws->getFullscreenWindow(); + for (auto const& w : g_pCompositor->m_windows) { if (w->m_workspace == ws) { @@ -467,8 +469,11 @@ void CDesktopAnimationManager::setFullscreenFadeAnimation(PHLWORKSPACE ws, eAnim if (!FULLSCREEN) *w->m_alpha = 1.F; - else if (!w->isFullscreen()) - *w->m_alpha = !w->m_createdOverFullscreen ? 0.f : 1.f; + else if (!w->isFullscreen()) { + const bool CREATED_OVER_FS = w->m_createdOverFullscreen; + const bool IS_IN_GROUP_OF_FS = FSWINDOW && FSWINDOW->hasInGroup(w); + *w->m_alpha = !CREATED_OVER_FS && !IS_IN_GROUP_OF_FS ? 0.f : 1.f; + } } }