diff options
Diffstat (limited to 'src/layout/space')
| -rw-r--r-- | src/layout/space/Space.cpp | 20 | ||||
| -rw-r--r-- | src/layout/space/Space.hpp | 2 |
2 files changed, 19 insertions, 3 deletions
diff --git a/src/layout/space/Space.cpp b/src/layout/space/Space.cpp index 26c02aae..35741a14 100644 --- a/src/layout/space/Space.cpp +++ b/src/layout/space/Space.cpp @@ -153,13 +153,29 @@ void CSpace::recalculate() { m_algorithm->recalculate(); } -void CSpace::setFullscreen(SP<ITarget> t, eFullscreenMode mode) { - t->setFullscreenMode(mode); +eFullscreenRequestResult CSpace::setFullscreen(SP<ITarget> t, eFullscreenMode currentEffectiveMode, eFullscreenMode mode) { + if (!t) + return FULLSCREEN_REQUEST_DEFAULT; + + const auto REQUEST_RESULT = m_algorithm ? m_algorithm->requestFullscreen(t, currentEffectiveMode, mode) : FULLSCREEN_REQUEST_DEFAULT; + + t->setLayoutManagedFullscreen(REQUEST_RESULT == FULLSCREEN_REQUEST_HANDLED_BY_LAYOUT && mode == FSMODE_FULLSCREEN); + if (REQUEST_RESULT != FULLSCREEN_REQUEST_HANDLED_BY_LAYOUT) + t->setFullscreenMode(mode); + + if (REQUEST_RESULT == FULLSCREEN_REQUEST_HANDLED_BY_LAYOUT) { + if (const auto WORKSPACE = workspace()) { + WORKSPACE->m_fullscreenMode = FSMODE_NONE; + WORKSPACE->m_hasFullscreenWindow = false; + } + } if (mode == FSMODE_NONE && m_algorithm && t->floating()) m_algorithm->recenter(t); recalculate(); + + return REQUEST_RESULT; } Config::ErrorResult CSpace::layoutMsg(const std::string_view& sv) { diff --git a/src/layout/space/Space.hpp b/src/layout/space/Space.hpp index 5d7f9d01..a42dd55c 100644 --- a/src/layout/space/Space.hpp +++ b/src/layout/space/Space.hpp @@ -30,7 +30,7 @@ namespace Layout { void setAlgorithmProvider(SP<CAlgorithm> algo); void recheckWorkArea(); - void setFullscreen(SP<ITarget> t, eFullscreenMode mode); + eFullscreenRequestResult setFullscreen(SP<ITarget> t, eFullscreenMode currentEffectiveMode, eFullscreenMode mode); void moveTargetInDirection(SP<ITarget> t, Math::eDirection dir, bool silent); |
