From 982b2cb9ed228c1bdbfaf133a7913c79301d92dc Mon Sep 17 00:00:00 2001 From: bjarke-cachy-btw Date: Wed, 8 Jul 2026 14:13:47 +0200 Subject: [PATCH] add steam patch --- dwm | Bin 96288 -> 96288 bytes dwm.c | 22 ++- dwm.c.orig | 176 +++++++++++++++--- dwm.c.rej | 27 ++- dwm.o | Bin 91360 -> 91624 bytes ...dwm-actualfullscreen-20211013-cb3f58a.diff | 68 ------- patches/dwm-steam-6.6.diff | 72 +++++++ 7 files changed, 249 insertions(+), 116 deletions(-) delete mode 100644 patches/dwm-actualfullscreen-20211013-cb3f58a.diff create mode 100644 patches/dwm-steam-6.6.diff diff --git a/dwm b/dwm index 742cdc0a7717268d1ba495eb846cb99513b50cdb..2d8fd653ad8f2701b2cec204b72d175d52aa80c2 100755 GIT binary patch delta 23352 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 Bv>*Tg delta 23269 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 diff --git a/dwm.c b/dwm.c index 3c095eb..be695cc 100644 --- a/dwm.c +++ b/dwm.c @@ -112,6 +112,7 @@ struct Client { int bw, oldbw; unsigned int tags; int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen; + int issteam; int fakefullscreen; Client *next; Client *snext; @@ -389,6 +390,9 @@ applyrules(Client *c) class = ch.res_class ? ch.res_class : broken; instance = ch.res_name ? ch.res_name : broken; + if (strstr(class, "Steam") || strstr(class, "steam_app_")) + c->issteam = 1; + for (i = 0; i < LENGTH(rules); i++) { r = &rules[i]; if ((!r->title || strstr(c->name, r->title)) @@ -764,13 +768,15 @@ configurerequest(XEvent *e) c->bw = ev->border_width; else if (c->isfloating || !selmon->lt[selmon->sellt]->arrange) { m = c->mon; - if (ev->value_mask & CWX) { - c->oldx = c->x; - c->x = m->mx + ev->x; - } - if (ev->value_mask & CWY) { - c->oldy = c->y; - c->y = m->my + ev->y; + if (!c->issteam) { + if (ev->value_mask & CWX) { + c->oldx = c->x; + c->x = m->mx + ev->x; + } + if (ev->value_mask & CWY) { + c->oldy = c->y; + c->y = m->my + ev->y; + } } if (ev->value_mask & CWWidth) { c->oldw = c->w; @@ -1975,6 +1981,8 @@ setfocus(Client *c) XA_WINDOW, 32, PropModeReplace, (unsigned char *) &(c->win), 1); } + if (c->issteam) + setclientstate(c, NormalState); sendevent(c->win, wmatom[WMTakeFocus], NoEventMask, wmatom[WMTakeFocus], CurrentTime, 0, 0, 0); } diff --git a/dwm.c.orig b/dwm.c.orig index 06a2ee9..3c095eb 100644 --- a/dwm.c.orig +++ b/dwm.c.orig @@ -112,6 +112,7 @@ struct Client { int bw, oldbw; unsigned int tags; int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen; + int fakefullscreen; Client *next; Client *snext; Monitor *mon; @@ -211,6 +212,7 @@ static void grabkeys(void); static void incnmaster(const Arg *arg); static void keypress(XEvent *e); static void killclient(const Arg *arg); +static void losefullscreen(Client *next); static void manage(Window w, XWindowAttributes *wa); static void mappingnotify(XEvent *e); static void maprequest(XEvent *e); @@ -253,7 +255,9 @@ static Monitor *systraytomon(Monitor *m); static void tag(const Arg *arg); static void tagmon(const Arg *arg); static void togglebar(const Arg *arg); +static void togglefakefullscreen(const Arg *arg); static void togglefloating(const Arg *arg); +static void togglefullscreen(const Arg *arg); static void togglescratch(const Arg *arg); static void toggletag(const Arg *arg); static void toggleview(const Arg *arg); @@ -688,9 +692,12 @@ clientmessage(XEvent *e) return; if (cme->message_type == netatom[NetWMState]) { if (cme->data.l[1] == netatom[NetWMFullscreen] - || cme->data.l[2] == netatom[NetWMFullscreen]) + || cme->data.l[2] == netatom[NetWMFullscreen]) { + if (c->fakefullscreen == 2 && c->isfullscreen) + c->fakefullscreen = 3; setfullscreen(c, (cme->data.l[0] == 1 /* _NET_WM_STATE_ADD */ || (cme->data.l[0] == 2 /* _NET_WM_STATE_TOGGLE */ && !c->isfullscreen))); + } } else if (cme->message_type == netatom[NetActiveWindow]) { if (c != selmon->sel && !c->isurgent) seturgent(c, 1); @@ -734,7 +741,7 @@ configurenotify(XEvent *e) updatebars(); for (m = mons; m; m = m->next) { for (c = m->clients; c; c = c->next) - if (c->isfullscreen) + if (c->isfullscreen && c->fakefullscreen != 1) resizeclient(c, m->mx, m->my, m->mw, m->mh); resizebarwin(m); } @@ -983,8 +990,10 @@ focus(Client *c) { if (!c || !ISVISIBLE(c)) for (c = selmon->stack; c && !ISVISIBLE(c); c = c->snext); - if (selmon->sel && selmon->sel != c) + if (selmon->sel && selmon->sel != c) { + losefullscreen(c); unfocus(selmon->sel, 0); + } if (c) { if (c->mon != selmon) selmon = c->mon; @@ -1098,7 +1107,7 @@ focusstack(const Arg *arg) { Client *c = NULL, *i; - if (!selmon->sel || (selmon->sel->isfullscreen && lockfullscreen)) + if (!selmon->sel || (selmon->sel->isfullscreen && selmon->sel->fakefullscreen != 1)) return; if (arg->i > 0) { for (c = selmon->sel->next; c && !ISVISIBLE(c); c = c->next); @@ -1305,6 +1314,16 @@ killclient(const Arg *arg) } } +void +losefullscreen(Client *next) +{ + Client *sel = selmon->sel; + if (!sel || !next) + return; + if (sel->isfullscreen && sel->fakefullscreen != 1 && ISVISIBLE(sel) && sel->mon == next->mon && !next->isfloating) + setfullscreen(sel, 0); +} + void manage(Window w, XWindowAttributes *wa) { @@ -1378,8 +1397,10 @@ manage(Window w, XWindowAttributes *wa) (unsigned char *) &(c->win), 1); XMoveResizeWindow(dpy, c->win, c->x + 2 * sw, c->y, c->w, c->h); /* some windows require this */ setclientstate(c, NormalState); - if (c->mon == selmon) + if (c->mon == selmon) { + losefullscreen(c); unfocus(selmon->sel, 0); + } c->mon->sel = c; arrange(c->mon); XMapWindow(dpy, c->win); @@ -1458,7 +1479,7 @@ movemouse(const Arg *arg) if (!(c = selmon->sel)) return; - if (c->isfullscreen) /* no support moving fullscreen windows by mouse */ + if (c->isfullscreen && c->fakefullscreen != 1) /* no support moving fullscreen windows by mouse */ return; restack(selmon); ocx = c->x; @@ -1763,7 +1784,7 @@ resizemouse(const Arg *arg) if (!(c = selmon->sel)) return; - if (c->isfullscreen) /* no support resizing fullscreen windows by mouse */ + if (c->isfullscreen && c->fakefullscreen != 1) /* no support resizing fullscreen windows by mouse */ return; restack(selmon); ocx = c->x; @@ -1961,29 +1982,79 @@ setfocus(Client *c) void setfullscreen(Client *c, int fullscreen) { - if (fullscreen && !c->isfullscreen) { - XChangeProperty(dpy, c->win, netatom[NetWMState], XA_ATOM, 32, - PropModeReplace, (unsigned char*)&netatom[NetWMFullscreen], 1); + XEvent ev; + int savestate = 0, restorestate = 0, restorefakefullscreen = 0; + + if ((c->fakefullscreen == 0 && fullscreen && !c->isfullscreen) // normal fullscreen + || (c->fakefullscreen == 2 && fullscreen)) // fake fullscreen --> actual fullscreen + savestate = 1; // go actual fullscreen + else if ((c->fakefullscreen == 0 && !fullscreen && c->isfullscreen) // normal fullscreen exit + || (c->fakefullscreen >= 2 && !fullscreen)) // fullscreen exit --> fake fullscreen + restorestate = 1; // go back into tiled + + /* If leaving fullscreen and the window was previously fake fullscreen (2), then restore + * that while staying in fullscreen. The exception to this is if we are in said state, but + * the client itself disables fullscreen (3) then we let the client go out of fullscreen + * while keeping fake fullscreen enabled (as otherwise there will be a mismatch between the + * client and the window manager's perception of the client's fullscreen state). */ + if (c->fakefullscreen == 2 && !fullscreen && c->isfullscreen) { + restorefakefullscreen = 1; c->isfullscreen = 1; - c->oldstate = c->isfloating; + fullscreen = 1; + } + + if (fullscreen != c->isfullscreen) { // only send property change if necessary + if (fullscreen) + XChangeProperty(dpy, c->win, netatom[NetWMState], XA_ATOM, 32, + PropModeReplace, (unsigned char*)&netatom[NetWMFullscreen], 1); + else + XChangeProperty(dpy, c->win, netatom[NetWMState], XA_ATOM, 32, + PropModeReplace, (unsigned char*)0, 0); + } + + c->isfullscreen = fullscreen; + + /* Some clients, e.g. firefox, will send a client message informing the window manager + * that it is going into fullscreen after receiving the above signal. This has the side + * effect of this function (setfullscreen) sometimes being called twice when toggling + * fullscreen on and off via the window manager as opposed to the application itself. + * To protect against obscure issues where the client settings are stored or restored + * when they are not supposed to we add an additional bit-lock on the old state so that + * settings can only be stored and restored in that precise order. */ + if (savestate && !(c->oldstate & (1 << 1))) { c->oldbw = c->bw; + c->oldstate = c->isfloating | (1 << 1); c->bw = 0; c->isfloating = 1; resizeclient(c, c->mon->mx, c->mon->my, c->mon->mw, c->mon->mh); XRaiseWindow(dpy, c->win); - } else if (!fullscreen && c->isfullscreen){ - XChangeProperty(dpy, c->win, netatom[NetWMState], XA_ATOM, 32, - PropModeReplace, (unsigned char*)0, 0); - c->isfullscreen = 0; - c->isfloating = c->oldstate; + } else if (restorestate && (c->oldstate & (1 << 1))) { c->bw = c->oldbw; - c->x = c->oldx; - c->y = c->oldy; - c->w = c->oldw; - c->h = c->oldh; + c->isfloating = c->oldstate = c->oldstate & 1; + if (restorefakefullscreen || c->fakefullscreen == 3) + c->fakefullscreen = 1; + /* The client may have been moved to another monitor whilst in fullscreen which if tiled + * we address by doing a full arrange of tiled clients. If the client is floating then the + * height and width may be larger than the monitor's window area, so we cap that by + * ensuring max / min values. */ + if (c->isfloating) { + c->x = MAX(c->mon->wx, c->oldx); + c->y = MAX(c->mon->wy, c->oldy); + c->w = MIN(c->mon->ww - c->x - 2*c->bw, c->oldw); + c->h = MIN(c->mon->wh - c->y - 2*c->bw, c->oldh); + resizeclient(c, c->x, c->y, c->w, c->h); + restack(c->mon); + } else + arrange(c->mon); + } else resizeclient(c, c->x, c->y, c->w, c->h); - arrange(c->mon); - } + + /* Exception: if the client was in actual fullscreen and we exit out to fake fullscreen + * mode, then the focus would sometimes drift to whichever window is under the mouse cursor + * at the time. To avoid this we ask X for all EnterNotify events and just ignore them. + */ + if (!c->isfullscreen) + while (XCheckMaskEvent(dpy, EnterWindowMask, &ev)); } void @@ -2219,9 +2290,19 @@ tag(const Arg *arg) void tagmon(const Arg *arg) { - if (!selmon->sel || !mons->next) + Client *c = selmon->sel; + if (!c || !mons->next) return; - sendmon(selmon->sel, dirtomon(arg->i)); + if (c->isfullscreen) { + c->isfullscreen = 0; + sendmon(c, dirtomon(arg->i)); + c->isfullscreen = 1; + if (c->fakefullscreen != 1) { + resizeclient(c, c->mon->mx, c->mon->my, c->mon->mw, c->mon->mh); + XRaiseWindow(dpy, c->win); + } + } else + sendmon(c, dirtomon(arg->i)); } void @@ -2244,18 +2325,51 @@ togglebar(const Arg *arg) arrange(selmon); } +void +togglefakefullscreen(const Arg *arg) +{ + Client *c = selmon->sel; + if (!c) + return; + + if (c->fakefullscreen != 1 && c->isfullscreen) { // exit fullscreen --> fake fullscreen + c->fakefullscreen = 2; + setfullscreen(c, 0); + } else if (c->fakefullscreen == 1) { + setfullscreen(c, 0); + c->fakefullscreen = 0; + } else { + c->fakefullscreen = 1; + setfullscreen(c, 1); + } +} + void togglefloating(const Arg *arg) { - if (!selmon->sel) + Client *c = selmon->sel; + if (!c) return; - if (selmon->sel->isfullscreen) /* no support for fullscreen windows */ + if (c->isfullscreen && c->fakefullscreen != 1) /* no support for fullscreen windows */ return; - selmon->sel->isfloating = !selmon->sel->isfloating || selmon->sel->isfixed; - if (selmon->sel->isfloating) - resize(selmon->sel, selmon->sel->x, selmon->sel->y, - selmon->sel->w, selmon->sel->h, 0); - arrange(selmon); + c->isfloating = !c->isfloating || c->isfixed; + if (c->isfloating) + resize(c, c->x, c->y, c->w, c->h, 0); + arrange(c->mon); +} + +void +togglefullscreen(const Arg *arg) +{ + Client *c = selmon->sel; + if (!c) + return; + + if (c->fakefullscreen == 1) { // fake fullscreen --> fullscreen + c->fakefullscreen = 2; + setfullscreen(c, 1); + } else + setfullscreen(c, !c->isfullscreen); } void diff --git a/dwm.c.rej b/dwm.c.rej index 9d85e24..f62ea2b 100644 --- a/dwm.c.rej +++ b/dwm.c.rej @@ -1,12 +1,19 @@ --- dwm.c +++ dwm.c -@@ -213,7 +215,9 @@ static void tag(const Arg *arg); - static void tagmon(const Arg *arg); - static void tile(Monitor *); - static void togglebar(const Arg *arg); -+static void togglefakefullscreen(const Arg *arg); - static void togglefloating(const Arg *arg); -+static void togglefullscreen(const Arg *arg); - static void toggletag(const Arg *arg); - static void toggleview(const Arg *arg); - static void unfocus(Client *c, int setfocus); +@@ -92,6 +92,7 @@ struct Client { + int bw, oldbw; + unsigned int tags; + int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen; ++ int issteam; + Client *next; + Client *snext; + Monitor *mon; +@@ -1480,6 +1486,8 @@ setfocus(Client *c) + XA_WINDOW, 32, PropModeReplace, + (unsigned char *) &(c->win), 1); + } ++ if (c->issteam) ++ setclientstate(c, NormalState); + sendevent(c, wmatom[WMTakeFocus]); + } + diff --git a/dwm.o b/dwm.o index 384ff0b0a32167b7487f9e204a1f3fc359bf66cd..d3f3892468f4f19fb62f021bc9ad2491dc59bc44 100644 GIT binary patch delta 24876 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 A>i_@% diff --git a/patches/dwm-actualfullscreen-20211013-cb3f58a.diff b/patches/dwm-actualfullscreen-20211013-cb3f58a.diff deleted file mode 100644 index d3be230..0000000 --- a/patches/dwm-actualfullscreen-20211013-cb3f58a.diff +++ /dev/null @@ -1,68 +0,0 @@ -From eea13010ffc3983392857ee1e3804e3aa1064d7a Mon Sep 17 00:00:00 2001 -From: Soenke Lambert -Date: Wed, 13 Oct 2021 18:21:09 +0200 -Subject: [PATCH] Fullscreen current window with [Alt]+[Shift]+[f] - -This actually fullscreens a window, instead of just hiding the statusbar -and applying the monocle layout. ---- - config.def.h | 1 + - dwm.1 | 3 +++ - dwm.c | 8 ++++++++ - 3 files changed, 12 insertions(+) - -diff --git a/config.def.h b/config.def.h -index 1c0b587..8cd3204 100644 ---- a/config.def.h -+++ b/config.def.h -@@ -78,6 +78,7 @@ static Key keys[] = { - { MODKEY, XK_m, setlayout, {.v = &layouts[2]} }, - { MODKEY, XK_space, setlayout, {0} }, - { MODKEY|ShiftMask, XK_space, togglefloating, {0} }, -+ { MODKEY|ShiftMask, XK_f, togglefullscr, {0} }, - { MODKEY, XK_0, view, {.ui = ~0 } }, - { MODKEY|ShiftMask, XK_0, tag, {.ui = ~0 } }, - { MODKEY, XK_comma, focusmon, {.i = -1 } }, -diff --git a/dwm.1 b/dwm.1 -index 13b3729..a368d05 100644 ---- a/dwm.1 -+++ b/dwm.1 -@@ -116,6 +116,9 @@ Zooms/cycles focused window to/from master area (tiled layouts only). - .B Mod1\-Shift\-c - Close focused window. - .TP -+.B Mod1\-Shift\-f -+Toggle fullscreen for focused window. -+.TP - .B Mod1\-Shift\-space - Toggle focused window between tiled and floating state. - .TP -diff --git a/dwm.c b/dwm.c -index 4465af1..c1b899a 100644 ---- a/dwm.c -+++ b/dwm.c -@@ -211,6 +211,7 @@ static void tagmon(const Arg *arg); - static void tile(Monitor *); - static void togglebar(const Arg *arg); - static void togglefloating(const Arg *arg); -+static void togglefullscr(const Arg *arg); - static void toggletag(const Arg *arg); - static void toggleview(const Arg *arg); - static void unfocus(Client *c, int setfocus); -@@ -1719,6 +1720,13 @@ togglefloating(const Arg *arg) - arrange(selmon); - } - -+void -+togglefullscr(const Arg *arg) -+{ -+ if(selmon->sel) -+ setfullscreen(selmon->sel, !selmon->sel->isfullscreen); -+} -+ - void - toggletag(const Arg *arg) - { --- -2.30.2 - diff --git a/patches/dwm-steam-6.6.diff b/patches/dwm-steam-6.6.diff new file mode 100644 index 0000000..c6f5fd7 --- /dev/null +++ b/patches/dwm-steam-6.6.diff @@ -0,0 +1,72 @@ +From df7d9a685f38b64b8087faa3c72f05acf0190383 Mon Sep 17 00:00:00 2001 +From: Bakkeby +Date: Wed, 26 Jun 2024 23:06:37 +0200 +Subject: [PATCH] Steam patch + +Steam, and steam windows (games), trigger a ConfigureNotify request every time the window +gets focus. More so, the configure event passed along from Steam tends to have the wrong +x and y co-ordinates which can make the window, if floating, jump around the screen. + +This patch works around this age-old issue by ignoring the x and y co-ordinates for +ConfigureNotify requests relating to Steam windows. +--- + dwm.c | 22 +++++++++++++++------- + 1 file changed, 15 insertions(+), 7 deletions(-) + +diff --git a/dwm.c b/dwm.c +index 1443802..d99a6fb 100644 +--- a/dwm.c ++++ b/dwm.c +@@ -92,6 +92,7 @@ struct Client { + int bw, oldbw; + unsigned int tags; + int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen; ++ int issteam; + Client *next; + Client *snext; + Monitor *mon; +@@ -290,6 +291,9 @@ applyrules(Client *c) + class = ch.res_class ? ch.res_class : broken; + instance = ch.res_name ? ch.res_name : broken; + ++ if (strstr(class, "Steam") || strstr(class, "steam_app_")) ++ c->issteam = 1; ++ + for (i = 0; i < LENGTH(rules); i++) { + r = &rules[i]; + if ((!r->title || strstr(c->name, r->title)) +@@ -590,13 +594,15 @@ configurerequest(XEvent *e) + c->bw = ev->border_width; + else if (c->isfloating || !selmon->lt[selmon->sellt]->arrange) { + m = c->mon; +- if (ev->value_mask & CWX) { +- c->oldx = c->x; +- c->x = m->mx + ev->x; +- } +- if (ev->value_mask & CWY) { +- c->oldy = c->y; +- c->y = m->my + ev->y; ++ if (!c->issteam) { ++ if (ev->value_mask & CWX) { ++ c->oldx = c->x; ++ c->x = m->mx + ev->x; ++ } ++ if (ev->value_mask & CWY) { ++ c->oldy = c->y; ++ c->y = m->my + ev->y; ++ } + } + if (ev->value_mask & CWWidth) { + c->oldw = c->w; +@@ -1475,6 +1481,8 @@ setfocus(Client *c) + XA_WINDOW, 32, PropModeReplace, + (unsigned char *) &(c->win), 1); + } ++ if (c->issteam) ++ setclientstate(c, NormalState); + sendevent(c, wmatom[WMTakeFocus]); + } + +-- +2.50.1 +