From 58833eb1d79d7f03402cee0730c309b79f2e4501 Mon Sep 17 00:00:00 2001 From: Vaxry <43317083+vaxerski@users.noreply.github.com> Date: Thu, 7 May 2026 15:21:06 +0100 Subject: layout/scrolling: handle fullscreen manually (#14190) Makes scroll handle fullscreen by itself, allowing for fs scrolls. --- src/desktop/Workspace.cpp | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'src/desktop/Workspace.cpp') diff --git a/src/desktop/Workspace.cpp b/src/desktop/Workspace.cpp index 23ea0dd7..6ff6d0b4 100644 --- a/src/desktop/Workspace.cpp +++ b/src/desktop/Workspace.cpp @@ -1,5 +1,6 @@ #include "Workspace.hpp" #include "view/Group.hpp" +#include "view/LayerSurface.hpp" #include "../Compositor.hpp" #include "../config/shared/animation/AnimationTree.hpp" #include "../config/shared/workspace/WorkspaceRuleManager.hpp" @@ -8,6 +9,7 @@ #include "../managers/EventManager.hpp" #include "../helpers/Monitor.hpp" #include "../layout/space/Space.hpp" +#include "../layout/target/Target.hpp" #include "../layout/supplementary/WorkspaceAlgoMatcher.hpp" #include "../event/EventBus.hpp" @@ -539,7 +541,10 @@ void CWorkspace::rename(const std::string& name) { } void CWorkspace::updateWindows() { - m_hasFullscreenWindow = std::ranges::any_of(m_space->targets(), [](const auto& t) { return t->fullscreenMode() != FSMODE_NONE; }); + m_hasFullscreenWindow = std::ranges::any_of(m_space->targets(), [](const auto& t) { return t && t->fullscreenMode() != FSMODE_NONE && !t->layoutManagedFullscreen(); }); + + if (!m_hasFullscreenWindow) + m_fullscreenMode = FSMODE_NONE; for (auto const& t : m_space->targets()) { if (t->window()) @@ -562,3 +567,15 @@ void CWorkspace::setPersistent(bool persistent) { bool CWorkspace::isPersistent() { return m_persistent; } + +void CWorkspace::setNoMembersAboveFullscreen() { + // make all windows and layers on the same workspace under the fullscreen window + for (auto const& w : g_pCompositor->m_windows) { + if (w->m_workspace == m_self && !w->isFullscreen() && !w->m_fadingOut && !w->m_pinned) + w->m_createdOverFullscreen = false; + } + for (auto const& ls : g_pCompositor->m_layers) { + if (ls->m_monitor == m_monitor) + ls->m_aboveFullscreen = false; + } +} -- cgit v1.2.3