summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDashie <fabio.lenherr@gmail.com>2022-11-26 21:44:40 +0100
committerGitHub <noreply@github.com>2022-11-26 20:44:40 +0000
commite2f3f5fe63323ef6477b312f770083be485d53d7 (patch)
treec02b6bbb13c0545a727aa68de7ae2dfe2d1957a2 /src
parent0db75852f326de0433c880d010dd6427be193199 (diff)
Add nofullscreen to windowrules (#1107)
* feat: add windowrule to prevent fullscreen
Diffstat (limited to 'src')
-rw-r--r--src/Window.hpp3
-rw-r--r--src/config/ConfigManager.cpp1
-rw-r--r--src/events/Windows.cpp10
3 files changed, 10 insertions, 4 deletions
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;