diff --git a/src/Window.hpp b/src/Window.hpp index 5aab6db8..59ef1857 100644 --- a/src/Window.hpp +++ b/src/Window.hpp @@ -131,8 +131,9 @@ public: bool m_bNoFocus = false; bool m_bNoInitialFocus = false; - // initial fullscreen + // initial fullscreen and fullscreen disabled bool m_bWantsInitialFullscreen = false; + bool m_bNoFullscreenRequest = false; SSurfaceTreeNode* m_pSurfaceTree = nullptr; diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 56e51b37..88d864a1 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -731,6 +731,7 @@ bool windowRuleValid(const std::string& RULE) { && RULE != "opaque" && RULE != "forceinput" && RULE != "fullscreen" + && RULE != "nofullscreenrequest" && RULE != "pin" && RULE != "noanim" && RULE != "windowdance" diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp index 964e7bc7..256b58d7 100644 --- a/src/events/Windows.cpp +++ b/src/events/Windows.cpp @@ -164,6 +164,8 @@ void Events::listener_mapWindow(void* owner, void* data) { PWINDOW->m_bIsPseudotiled = true; } else if (r.szRule.find("nofocus") == 0) { PWINDOW->m_bNoFocus = true; + } else if (r.szRule.find("nofullscreenrequest") == 0) { + PWINDOW->m_bNoFullscreenRequest = true; } else if (r.szRule == "fullscreen") { requestsFullscreen = true; } else if (r.szRule == "windowdance") { @@ -442,7 +444,7 @@ void Events::listener_mapWindow(void* owner, void* data) { const auto TIMER = wl_event_loop_add_timer(g_pCompositor->m_sWLEventLoop, setAnimToMove, PWINDOW); wl_event_source_timer_update(TIMER, PWINDOW->m_vRealPosition.getDurationLeftMs() + 5); - if (requestsFullscreen) { + if (requestsFullscreen && !PWINDOW->m_bNoFullscreenRequest) { // fix fullscreen on requested (basically do a switcheroo) if (PWORKSPACE->m_bHasFullscreenWindow) { const auto PFULLWINDOW = g_pCompositor->getFullscreenWindowOnWorkspace(PWORKSPACE->m_iID); @@ -726,7 +728,7 @@ void Events::listener_fullscreenWindow(void* owner, void* data) { return; } - if (PWINDOW->isHidden()) + if (PWINDOW->isHidden() || PWINDOW->m_bNoFullscreenRequest) return; if (!PWINDOW->m_bIsX11) { @@ -912,8 +914,10 @@ void Events::listener_NewXDGDeco(wl_listener* listener, void* data) { void Events::listener_requestMaximize(void* owner, void* data) { const auto PWINDOW = (CWindow*)owner; - Debug::log(LOG, "Maximize request for %x", PWINDOW); + if (PWINDOW->m_bNoFullscreenRequest) + return; + Debug::log(LOG, "Maximize request for %x", PWINDOW); if (!PWINDOW->m_bIsX11) { const auto EV = (wlr_foreign_toplevel_handle_v1_maximized_event*)data;