From 8e084ca49bfb3c443d7283c6ca308c28b3b5c4d4 Mon Sep 17 00:00:00 2001 From: MightyPlaza <123664421+MightyPlaza@users.noreply.github.com> Date: Mon, 21 Jul 2025 18:52:20 +0100 Subject: [PATCH 1/4] use active window alpha on setGroupCurrent modified: src/desktop/Window.cpp --- src/desktop/Window.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp index 14c9d4cef..a44a7b1ec 100644 --- a/src/desktop/Window.cpp +++ b/src/desktop/Window.cpp @@ -1045,6 +1045,7 @@ void CWindow::setGroupCurrent(PHLWINDOW pWindow) { const auto CURRENTISFOCUS = PCURRENT == g_pCompositor->m_lastWindow.lock(); + const auto PWINDOWALPHA = PCURRENT->m_alpha->value(); const auto PWINDOWSIZE = PCURRENT->m_realSize->value(); const auto PWINDOWPOS = PCURRENT->m_realPosition->value(); const auto PWINDOWSIZEGOAL = PCURRENT->m_realSize->goal(); @@ -1068,6 +1069,7 @@ void CWindow::setGroupCurrent(PHLWINDOW pWindow) { pWindow->m_realPosition->setValue(PWINDOWPOS); pWindow->m_realSize->setValue(PWINDOWSIZE); + pWindow->m_alpha->setValue(PWINDOWALPHA); if (FULLSCREEN) g_pCompositor->setWindowFullscreenInternal(pWindow, MODE); From 93b8c5544c1bf5f80a9f9212a79985f76812cc69 Mon Sep 17 00:00:00 2001 From: MightyPlaza <123664421+MightyPlaza@users.noreply.github.com> Date: Mon, 21 Jul 2025 18:53:32 +0100 Subject: [PATCH 2/4] slightly improve m_realBorderColorPrevious changes modified: src/Compositor.cpp --- src/Compositor.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index abfa8d848..469c1d926 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -1862,11 +1862,13 @@ void CCompositor::updateWindowAnimatedDecorationValues(PHLWINDOW pWindow) { auto* const GROUPINACTIVELOCKEDCOL = (CGradientValueData*)(PGROUPINACTIVELOCKEDCOL.ptr())->getData(); auto setBorderColor = [&](CGradientValueData grad) -> void { - if (grad == pWindow->m_realBorderColor) + if (pWindow->isHidden() || grad == pWindow->m_realBorderColor) return; - pWindow->m_realBorderColorPrevious = pWindow->m_realBorderColor; - pWindow->m_realBorderColor = grad; + if (pWindow->m_borderFadeAnimationProgress->value() > 0.5f) // should interpolate current and previous border color, but that isn't straightforward + pWindow->m_realBorderColorPrevious = pWindow->m_realBorderColor; + + pWindow->m_realBorderColor = grad; pWindow->m_borderFadeAnimationProgress->setValueAndWarp(0.f); *pWindow->m_borderFadeAnimationProgress = 1.f; }; From e3bc03fe8c91e57a1a841d3b937590ba35e32b36 Mon Sep 17 00:00:00 2001 From: MightyPlaza <123664421+MightyPlaza@users.noreply.github.com> Date: Tue, 22 Jul 2025 02:14:47 +0100 Subject: [PATCH 3/4] remove mon recalc on fullscreen set and unset modified: src/Compositor.cpp modified: src/Compositor.hpp modified: src/desktop/Window.cpp --- src/Compositor.cpp | 26 +++++++++++++++----------- src/Compositor.hpp | 4 ++-- src/desktop/Window.cpp | 2 +- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 469c1d926..74b3896d2 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -2287,11 +2287,11 @@ void CCompositor::changeWindowFullscreenModeClient(const PHLWINDOW PWINDOW, cons (eFullscreenMode)(ON ? (uint8_t)PWINDOW->m_fullscreenState.client | (uint8_t)MODE : ((uint8_t)PWINDOW->m_fullscreenState.client & (uint8_t)~MODE))); } -void CCompositor::setWindowFullscreenInternal(const PHLWINDOW PWINDOW, const eFullscreenMode MODE) { +void CCompositor::setWindowFullscreenInternal(const PHLWINDOW PWINDOW, const eFullscreenMode MODE, const bool recalculate) { if (PWINDOW->m_windowData.syncFullscreen.valueOrDefault()) - setWindowFullscreenState(PWINDOW, SFullscreenState{.internal = MODE, .client = MODE}); + setWindowFullscreenState(PWINDOW, SFullscreenState{.internal = MODE, .client = MODE}, recalculate); else - setWindowFullscreenState(PWINDOW, SFullscreenState{.internal = MODE, .client = PWINDOW->m_fullscreenState.client}); + setWindowFullscreenState(PWINDOW, SFullscreenState{.internal = MODE, .client = PWINDOW->m_fullscreenState.client}, recalculate); } void CCompositor::setWindowFullscreenClient(const PHLWINDOW PWINDOW, const eFullscreenMode MODE) { @@ -2301,7 +2301,7 @@ void CCompositor::setWindowFullscreenClient(const PHLWINDOW PWINDOW, const eFull setWindowFullscreenState(PWINDOW, SFullscreenState{.internal = PWINDOW->m_fullscreenState.internal, .client = MODE}); } -void CCompositor::setWindowFullscreenState(const PHLWINDOW PWINDOW, SFullscreenState state) { +void CCompositor::setWindowFullscreenState(const PHLWINDOW PWINDOW, SFullscreenState state, const bool recalculate) { static auto PDIRECTSCANOUT = CConfigValue("render:direct_scanout"); static auto PALLOWPINFULLSCREEN = CConfigValue("binds:allow_pin_fullscreen"); @@ -2326,7 +2326,7 @@ void CCompositor::setWindowFullscreenState(const PHLWINDOW PWINDOW, SFullscreenS } if (PWORKSPACE->m_hasFullscreenWindow && !PWINDOW->isFullscreen()) - setWindowFullscreenInternal(PWORKSPACE->getFullscreenWindow(), FSMODE_NONE); + setWindowFullscreenInternal(PWORKSPACE->getFullscreenWindow(), FSMODE_NONE, false); const bool CHANGEINTERNAL = !PWINDOW->m_pinned && CURRENT_EFFECTIVE_MODE != EFFECTIVE_MODE; @@ -2343,9 +2343,11 @@ void CCompositor::setWindowFullscreenState(const PHLWINDOW PWINDOW, SFullscreenS g_pXWaylandManager->setWindowFullscreen(PWINDOW, state.client & FSMODE_FULLSCREEN); if (!CHANGEINTERNAL) { - PWINDOW->updateDynamicRules(); - updateWindowAnimatedDecorationValues(PWINDOW); - g_pLayoutManager->getCurrentLayout()->recalculateMonitor(PWINDOW->monitorID()); + if (recalculate) { + PWINDOW->updateDynamicRules(); + updateWindowAnimatedDecorationValues(PWINDOW); + g_pLayoutManager->getCurrentLayout()->recalculateMonitor(PWINDOW->monitorID()); + } return; } @@ -2358,9 +2360,11 @@ void CCompositor::setWindowFullscreenState(const PHLWINDOW PWINDOW, SFullscreenS g_pEventManager->postEvent(SHyprIPCEvent{.event = "fullscreen", .data = std::to_string((int)EFFECTIVE_MODE != FSMODE_NONE)}); EMIT_HOOK_EVENT("fullscreen", PWINDOW); - PWINDOW->updateDynamicRules(); - updateWindowAnimatedDecorationValues(PWINDOW); - g_pLayoutManager->getCurrentLayout()->recalculateMonitor(PWINDOW->monitorID()); + if (recalculate) { + PWINDOW->updateDynamicRules(); + updateWindowAnimatedDecorationValues(PWINDOW); + g_pLayoutManager->getCurrentLayout()->recalculateMonitor(PWINDOW->monitorID()); + } // make all windows on the same workspace under the fullscreen window for (auto const& w : m_windows) { diff --git a/src/Compositor.hpp b/src/Compositor.hpp index b4a0c51cb..cfd064b1d 100644 --- a/src/Compositor.hpp +++ b/src/Compositor.hpp @@ -117,9 +117,9 @@ class CCompositor { void swapActiveWorkspaces(PHLMONITOR, PHLMONITOR); PHLMONITOR getMonitorFromString(const std::string&); bool workspaceIDOutOfBounds(const WORKSPACEID&); - void setWindowFullscreenInternal(const PHLWINDOW PWINDOW, const eFullscreenMode MODE); + void setWindowFullscreenInternal(const PHLWINDOW PWINDOW, const eFullscreenMode MODE, const bool recalculate=true); void setWindowFullscreenClient(const PHLWINDOW PWINDOW, const eFullscreenMode MODE); - void setWindowFullscreenState(const PHLWINDOW PWINDOW, const SFullscreenState state); + void setWindowFullscreenState(const PHLWINDOW PWINDOW, const SFullscreenState state, const bool recalculate=true); void changeWindowFullscreenModeClient(const PHLWINDOW PWINDOW, const eFullscreenMode MODE, const bool ON); void updateFullscreenFadeOnWorkspace(PHLWORKSPACE); PHLWINDOW getX11Parent(PHLWINDOW); diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp index a44a7b1ec..38afa5074 100644 --- a/src/desktop/Window.cpp +++ b/src/desktop/Window.cpp @@ -1054,7 +1054,7 @@ void CWindow::setGroupCurrent(PHLWINDOW pWindow) { const auto PWINDOWLASTFLOATINGPOSITION = PCURRENT->m_lastFloatingPosition; if (FULLSCREEN) - g_pCompositor->setWindowFullscreenInternal(PCURRENT, FSMODE_NONE); + g_pCompositor->setWindowFullscreenInternal(PCURRENT, FSMODE_NONE, false); PCURRENT->setHidden(true); pWindow->setHidden(false); // can remove m_pLastWindow From 294a6a5274e7de0670d0a1451e799f03ada43992 Mon Sep 17 00:00:00 2001 From: MightyPlaza <123664421+MightyPlaza@users.noreply.github.com> Date: Tue, 22 Jul 2025 19:08:08 +0100 Subject: [PATCH 4/4] clang-format modified: src/Compositor.hpp --- src/Compositor.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Compositor.hpp b/src/Compositor.hpp index cfd064b1d..4bea6f3fb 100644 --- a/src/Compositor.hpp +++ b/src/Compositor.hpp @@ -117,9 +117,9 @@ class CCompositor { void swapActiveWorkspaces(PHLMONITOR, PHLMONITOR); PHLMONITOR getMonitorFromString(const std::string&); bool workspaceIDOutOfBounds(const WORKSPACEID&); - void setWindowFullscreenInternal(const PHLWINDOW PWINDOW, const eFullscreenMode MODE, const bool recalculate=true); + void setWindowFullscreenInternal(const PHLWINDOW PWINDOW, const eFullscreenMode MODE, const bool recalculate = true); void setWindowFullscreenClient(const PHLWINDOW PWINDOW, const eFullscreenMode MODE); - void setWindowFullscreenState(const PHLWINDOW PWINDOW, const SFullscreenState state, const bool recalculate=true); + void setWindowFullscreenState(const PHLWINDOW PWINDOW, const SFullscreenState state, const bool recalculate = true); void changeWindowFullscreenModeClient(const PHLWINDOW PWINDOW, const eFullscreenMode MODE, const bool ON); void updateFullscreenFadeOnWorkspace(PHLWORKSPACE); PHLWINDOW getX11Parent(PHLWINDOW);