summaryrefslogtreecommitdiff
path: root/src/events/Windows.cpp
diff options
context:
space:
mode:
authorMightyPlaza <123664421+MightyPlaza@users.noreply.github.com>2023-07-23 17:47:41 +0000
committerGitHub <noreply@github.com>2023-07-23 19:47:41 +0200
commit50e6f368fffece098bea4f0cd87ce3d555ab2cbd (patch)
tree22e1ec6c56597e66deb9b868f04a3fcd380340a0 /src/events/Windows.cpp
parent975c4175b2db65e9b0e6bea79111cb2c4e5e4ca1 (diff)
windowrules: implements nomaximizerequest (#2785)
* Window.hpp * ConfigManager.cpp * Windows.cpp * fix maximize event
Diffstat (limited to 'src/events/Windows.cpp')
-rw-r--r--src/events/Windows.cpp17
1 files changed, 13 insertions, 4 deletions
diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp
index 56e8de25..4c901356 100644
--- a/src/events/Windows.cpp
+++ b/src/events/Windows.cpp
@@ -109,6 +109,8 @@ void Events::listener_mapWindow(void* owner, void* data) {
(PWINDOW->m_bIsX11 && PWINDOW->m_uSurface.xwayland->fullscreen);
bool requestsFakeFullscreen = false;
bool requestsMaximize = false;
+ bool overridingNoFullscreen = false;
+ bool overridingNoMaximize = false;
bool shouldFocus = true;
bool workspaceSpecial = false;
@@ -176,8 +178,11 @@ void Events::listener_mapWindow(void* owner, void* data) {
PWINDOW->m_bNoInitialFocus = true;
} else if (r.szRule.find("nofullscreenrequest") == 0) {
PWINDOW->m_bNoFullscreenRequest = true;
+ } else if (r.szRule.find("nomaximizerequest") == 0) {
+ PWINDOW->m_bNoMaximizeRequest = true;
} else if (r.szRule == "fullscreen") {
- requestsFullscreen = true;
+ requestsFullscreen = true;
+ overridingNoFullscreen = true;
} else if (r.szRule == "fakefullscreen") {
requestsFakeFullscreen = true;
} else if (r.szRule == "windowdance") {
@@ -189,7 +194,8 @@ void Events::listener_mapWindow(void* owner, void* data) {
} else if (r.szRule == "pin") {
PWINDOW->m_bPinned = true;
} else if (r.szRule == "maximize") {
- requestsMaximize = true;
+ requestsMaximize = true;
+ overridingNoMaximize = true;
} else if (r.szRule == "stayfocused") {
PWINDOW->m_bStayFocused = true;
} else if (r.szRule.find("idleinhibit") == 0) {
@@ -485,7 +491,8 @@ void Events::listener_mapWindow(void* owner, void* data) {
PWINDOW->m_vRealPosition.setCallbackOnEnd(setAnimToMove);
PWINDOW->m_vRealSize.setCallbackOnEnd(setAnimToMove);
- if ((requestsFullscreen || requestsMaximize || requestsFakeFullscreen) && !PWINDOW->m_bNoFullscreenRequest) {
+ if ((requestsFullscreen && (!PWINDOW->m_bNoFullscreenRequest || overridingNoFullscreen)) || (requestsMaximize && (!PWINDOW->m_bNoMaximizeRequest || overridingNoMaximize)) ||
+ requestsFakeFullscreen) {
// fix fullscreen on requested (basically do a switcheroo)
if (PWORKSPACE->m_bHasFullscreenWindow) {
const auto PFULLWINDOW = g_pCompositor->getFullscreenWindowOnWorkspace(PWORKSPACE->m_iID);
@@ -496,6 +503,8 @@ void Events::listener_mapWindow(void* owner, void* data) {
PWINDOW->m_bFakeFullscreenState = !PWINDOW->m_bFakeFullscreenState;
g_pXWaylandManager->setWindowFullscreen(PWINDOW, true);
} else {
+ overridingNoFullscreen = false;
+ overridingNoMaximize = false;
PWINDOW->m_vRealPosition.warp();
PWINDOW->m_vRealSize.warp();
g_pCompositor->setWindowFullscreen(PWINDOW, true, requestsFullscreen ? FULLSCREEN_FULL : FULLSCREEN_MAXIMIZED);
@@ -1125,7 +1134,7 @@ void Events::listener_NewXDGDeco(wl_listener* listener, void* data) {
void Events::listener_requestMaximize(void* owner, void* data) {
const auto PWINDOW = (CWindow*)owner;
- if (PWINDOW->m_bNoFullscreenRequest)
+ if (PWINDOW->m_bNoMaximizeRequest)
return;
Debug::log(LOG, "Maximize request for %lx", PWINDOW);