From c31c627cf85ea4fd40c1647c84d89b5e6f186785 Mon Sep 17 00:00:00 2001 From: scorpion-26 <58082714+scorpion-26@users.noreply.github.com> Date: Tue, 17 Jan 2023 13:20:10 +0100 Subject: [PATCH] Don't ignore previous maximise on defullscreen req (#1393) When defullscreening a window by the apps' request, we would return the window to normal mode, even if the window was previously maximized. Now a defullscreening request honors the previous maximized state. --- src/Window.hpp | 1 + src/events/Windows.cpp | 14 +++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/Window.hpp b/src/Window.hpp index a9f64379..d729df2a 100644 --- a/src/Window.hpp +++ b/src/Window.hpp @@ -111,6 +111,7 @@ class CWindow { bool m_bIsFloating = false; bool m_bDraggingTiled = false; // for dragging around tiled windows bool m_bIsFullscreen = false; + bool m_bWasMaximized = false; uint64_t m_iMonitorID = -1; std::string m_szTitle = ""; int m_iWorkspaceID = -1; diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp index 86496bfc..caa3972f 100644 --- a/src/events/Windows.cpp +++ b/src/events/Windows.cpp @@ -767,11 +767,23 @@ void Events::listener_fullscreenWindow(void* owner, void* data) { if (REQUESTED->fullscreen && PWINDOW->m_bIsFullscreen) { const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(PWINDOW->m_iWorkspaceID); if (PWORKSPACE->m_efFullscreenMode != FULLSCREEN_FULL) { + // Store that we were maximized + PWINDOW->m_bWasMaximized = true; g_pCompositor->setWindowFullscreen(PWINDOW, false, FULLSCREEN_MAXIMIZED); g_pCompositor->setWindowFullscreen(PWINDOW, true, FULLSCREEN_FULL); } - } else if (REQUESTED->fullscreen != PWINDOW->m_bIsFullscreen && !PWINDOW->m_bFakeFullscreenState) + else + PWINDOW->m_bWasMaximized = false; + } else if (REQUESTED->fullscreen != PWINDOW->m_bIsFullscreen && !PWINDOW->m_bFakeFullscreenState) { g_pCompositor->setWindowFullscreen(PWINDOW, REQUESTED->fullscreen, FULLSCREEN_FULL); + if (PWINDOW->m_bWasMaximized && !REQUESTED->fullscreen) { + // Was maximized before the fullscreen request, return now back to maximized instead of normal + g_pCompositor->setWindowFullscreen(PWINDOW, true, FULLSCREEN_MAXIMIZED); + } + } + + // Disable the maximize flag when we recieve a de-fullscreen request + PWINDOW->m_bWasMaximized &= REQUESTED->fullscreen; requestedFullState = REQUESTED->fullscreen;