summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDB <76707179+xVermillionx@users.noreply.github.com>2023-04-18 22:59:08 +0200
committerGitHub <noreply@github.com>2023-04-18 21:59:08 +0100
commite446db02f69ba7f3b3eea42a25f5de2c333bf0cd (patch)
tree60119d74a42e6160ae834b7def414e76c0f5b8d3 /src
parenta4330fe3787a97fe5b55eb787ce5746cea46ad14 (diff)
Add windowrule fakeFullScreen (#2043)
Co-authored-by: xVermillionx <xVermillionx@notvalid>
Diffstat (limited to 'src')
-rw-r--r--src/config/ConfigManager.cpp4
-rw-r--r--src/events/Windows.cpp23
2 files changed, 17 insertions, 10 deletions
diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp
index 375dde1b..ef1055eb 100644
--- a/src/config/ConfigManager.cpp
+++ b/src/config/ConfigManager.cpp
@@ -785,8 +785,8 @@ bool windowRuleValid(const std::string& RULE) {
return !(RULE != "float" && RULE != "tile" && RULE.find("opacity") != 0 && RULE.find("move") != 0 && RULE.find("size") != 0 && RULE.find("minsize") != 0 &&
RULE.find("maxsize") != 0 && RULE.find("pseudo") != 0 && RULE.find("monitor") != 0 && RULE.find("idleinhibit") != 0 && RULE != "nofocus" && RULE != "noblur" &&
RULE != "noshadow" && RULE != "noborder" && RULE != "center" && RULE != "opaque" && RULE != "forceinput" && RULE != "fullscreen" && RULE != "nofullscreenrequest" &&
- RULE != "nomaxsize" && RULE != "pin" && RULE != "noanim" && RULE != "dimaround" && RULE != "windowdance" && RULE != "maximize" && RULE.find("animation") != 0 &&
- RULE.find("rounding") != 0 && RULE.find("workspace") != 0 && RULE.find("bordercolor") != 0 && RULE != "forcergbx");
+ RULE != "fakefullscreen" && RULE != "nomaxsize" && RULE != "pin" && RULE != "noanim" && RULE != "dimaround" && RULE != "windowdance" && RULE != "maximize" &&
+ RULE.find("animation") != 0 && RULE.find("rounding") != 0 && RULE.find("workspace") != 0 && RULE.find("bordercolor") != 0 && RULE != "forcergbx");
}
bool layerRuleValid(const std::string& RULE) {
diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp
index 4b06c7bb..b8dcb074 100644
--- a/src/events/Windows.cpp
+++ b/src/events/Windows.cpp
@@ -114,9 +114,10 @@ void Events::listener_mapWindow(void* owner, void* data) {
bool requestsFullscreen = PWINDOW->m_bWantsInitialFullscreen ||
(!PWINDOW->m_bIsX11 && PWINDOW->m_uSurface.xdg->role == WLR_XDG_SURFACE_ROLE_TOPLEVEL && PWINDOW->m_uSurface.xdg->toplevel->requested.fullscreen) ||
(PWINDOW->m_bIsX11 && PWINDOW->m_uSurface.xwayland->fullscreen);
- bool requestsMaximize = false;
- bool shouldFocus = true;
- bool workspaceSpecial = false;
+ bool requestsFakeFullscreen = requestsFullscreen;
+ bool requestsMaximize = false;
+ bool shouldFocus = true;
+ bool workspaceSpecial = false;
PWINDOW->m_szInitialTitle = g_pXWaylandManager->getTitle(PWINDOW);
PWINDOW->m_szInitialClass = g_pXWaylandManager->getAppIDClass(PWINDOW);
@@ -182,6 +183,8 @@ void Events::listener_mapWindow(void* owner, void* data) {
PWINDOW->m_bNoFullscreenRequest = true;
} else if (r.szRule == "fullscreen") {
requestsFullscreen = true;
+ } else if (r.szRule == "fakefullscreen") {
+ requestsFakeFullscreen = true;
} else if (r.szRule == "windowdance") {
PWINDOW->m_sAdditionalConfigData.windowDanceCompat = true;
} else if (r.szRule == "nomaxsize") {
@@ -476,17 +479,21 @@ void Events::listener_mapWindow(void* owner, void* data) {
PWINDOW->m_vRealPosition.setCallbackOnEnd(setAnimToMove);
PWINDOW->m_vRealSize.setCallbackOnEnd(setAnimToMove);
- if ((requestsFullscreen || requestsMaximize) && !PWINDOW->m_bNoFullscreenRequest) {
+ if ((requestsFullscreen || requestsMaximize || requestsFakeFullscreen) && !PWINDOW->m_bNoFullscreenRequest) {
// fix fullscreen on requested (basically do a switcheroo)
if (PWORKSPACE->m_bHasFullscreenWindow) {
const auto PFULLWINDOW = g_pCompositor->getFullscreenWindowOnWorkspace(PWORKSPACE->m_iID);
g_pCompositor->setWindowFullscreen(PFULLWINDOW, false, FULLSCREEN_FULL);
}
- PWINDOW->m_vRealPosition.warp();
- PWINDOW->m_vRealSize.warp();
-
- g_pCompositor->setWindowFullscreen(PWINDOW, true, requestsFullscreen ? FULLSCREEN_FULL : FULLSCREEN_MAXIMIZED);
+ if (requestsFakeFullscreen && !PWINDOW->m_bFakeFullscreenState) {
+ PWINDOW->m_bFakeFullscreenState = !PWINDOW->m_bFakeFullscreenState;
+ g_pXWaylandManager->setWindowFullscreen(PWINDOW, true);
+ } else {
+ PWINDOW->m_vRealPosition.warp();
+ PWINDOW->m_vRealSize.warp();
+ g_pCompositor->setWindowFullscreen(PWINDOW, true, requestsFullscreen ? FULLSCREEN_FULL : FULLSCREEN_MAXIMIZED);
+ }
}
if (pFullscreenWindow && workspaceSilent) {