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;