From e53134ca904e47a24191ea028c019ac9728b7dad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Conzelmann?= <45296195+zephvr@users.noreply.github.com> Date: Mon, 11 Dec 2023 17:51:10 +0100 Subject: [PATCH] internal: fix interactions with fakefullscreen (#4113) - In a maximized window, unstuck fakefullscreen from on state - In a fakefullscreen window, going in and out of fullscreen state keep the fakefullscreen state rendered --- src/Compositor.cpp | 2 +- src/Window.cpp | 5 +++++ src/Window.hpp | 1 + src/managers/KeybindManager.cpp | 3 +-- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index f3d048a9..2618ad39 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -2257,7 +2257,7 @@ void CCompositor::setWindowFullscreen(CWindow* pWindow, bool on, eFullscreenMode g_pLayoutManager->getCurrentLayout()->fullscreenRequestForWindow(pWindow, MODE, on); - g_pXWaylandManager->setWindowFullscreen(pWindow, pWindow->m_bIsFullscreen && MODE == FULLSCREEN_FULL); + g_pXWaylandManager->setWindowFullscreen(pWindow, pWindow->shouldSendFullscreenState()); pWindow->updateDynamicRules(); updateWindowAnimatedDecorationValues(pWindow); diff --git a/src/Window.cpp b/src/Window.cpp index 58ec5c72..bd51f2ff 100644 --- a/src/Window.cpp +++ b/src/Window.cpp @@ -1000,3 +1000,8 @@ int CWindow::getRealBorderSize() { bool CWindow::canBeTorn() { return (m_sAdditionalConfigData.forceTearing.toUnderlying() || m_bTearingHint) && g_pHyprRenderer->m_bTearingEnvSatisfied; } + +bool CWindow::shouldSendFullscreenState() { + const auto MODE = g_pCompositor->getWorkspaceByID(m_iWorkspaceID)->m_efFullscreenMode; + return m_bFakeFullscreenState || (m_bIsFullscreen && (MODE == FULLSCREEN_FULL)); +} diff --git a/src/Window.hpp b/src/Window.hpp index 810400d7..c4f2a15d 100644 --- a/src/Window.hpp +++ b/src/Window.hpp @@ -366,6 +366,7 @@ class CWindow { bool opaque(); float rounding(); bool canBeTorn(); + bool shouldSendFullscreenState(); int getRealBorderSize(); void updateSpecialRenderData(); diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index 2046b867..6aea4e32 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -1918,8 +1918,7 @@ void CKeybindManager::fakeFullscreenActive(std::string args) { if (g_pCompositor->m_pLastWindow) { // will also set the flag g_pCompositor->m_pLastWindow->m_bFakeFullscreenState = !g_pCompositor->m_pLastWindow->m_bFakeFullscreenState; - g_pXWaylandManager->setWindowFullscreen(g_pCompositor->m_pLastWindow, - g_pCompositor->m_pLastWindow->m_bFakeFullscreenState || g_pCompositor->m_pLastWindow->m_bIsFullscreen); + g_pXWaylandManager->setWindowFullscreen(g_pCompositor->m_pLastWindow, g_pCompositor->m_pLastWindow->shouldSendFullscreenState()); } }