From c257e2e390e40f45a07686afe7676f5a32e691a8 Mon Sep 17 00:00:00 2001 From: bakkeby Date: Thu, 10 Sep 2020 09:41:00 +0200 Subject: [PATCH] fakefullscreen: prevent focus from drifting away from client when going from fullscreen to fake fullscreen --- dwm.c | 15 ++++++++++- patch/fakefullscreenclient.c | 52 +++++++++++++++++++++--------------- 2 files changed, 44 insertions(+), 23 deletions(-) diff --git a/dwm.c b/dwm.c index 50c0703..907b190 100644 --- a/dwm.c +++ b/dwm.c @@ -2494,7 +2494,13 @@ resizeclient(Client *c, int x, int y, int w, int h) #if MONOCLE_LAYOUT || &monocle == c->mon->lt[c->mon->sellt]->arrange #endif // MONOCLE_LAYOUT - ) && !c->isfullscreen && !c->isfloating + ) + #if FAKEFULLSCREEN_CLIENT_PATCH + && (c->fakefullscreen == 1 || !c->isfullscreen) && c->fakefullscreen + #else + && !c->isfullscreen + #endif // FAKEFULLSCREEN_CLIENT_PATCH + && !c->isfloating && c->mon->lt[c->mon->sellt]->arrange) { c->w = wc.width += c->bw * 2; c->h = wc.height += c->bw * 2; @@ -2503,7 +2509,14 @@ resizeclient(Client *c, int x, int y, int w, int h) #endif // NOBORDER_PATCH XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc); configure(c); + #if FAKEFULLSCREEN_CLIENT_PATCH + if (c->fakefullscreen == 1) + XSync(dpy, True); + else + XSync(dpy, False); + #else XSync(dpy, False); + #endif // FAKEFULLSCREEN_CLIENT_PATCH } void diff --git a/patch/fakefullscreenclient.c b/patch/fakefullscreenclient.c index 8805c4b..bb88665 100644 --- a/patch/fakefullscreenclient.c +++ b/patch/fakefullscreenclient.c @@ -1,27 +1,35 @@ void togglefakefullscreen(const Arg *arg) { - Client *c = selmon->sel; - if (!c) - return; + Client *c = selmon->sel; + if (!c) + return; - if (c->fakefullscreen) { - if (c->isfullscreen) - c->fakefullscreen = 0; - else - c->isfullscreen = 0; - } else { - if (c->isfullscreen) { - c->isfloating = c->oldstate; - c->bw = c->oldbw; - c->x = c->oldx; - c->y = c->oldy; - c->w = c->oldw; - c->h = c->oldh; - resizeclient(c, c->x, c->y, c->w, c->h); - } - c->fakefullscreen = 1; - c->isfullscreen = 0; - } - setfullscreen(c, !c->isfullscreen); + if (c->fakefullscreen) { + if (c->isfullscreen) { + if (c->isfloating && c->fakefullscreen == 1) { + c->oldstate = c->isfloating; + c->oldx = c->x; + c->oldy = c->y; + c->oldw = c->w; + c->oldh = c->h; + } + c->fakefullscreen = 0; + } + else + c->isfullscreen = 0; + } else { + c->fakefullscreen = 1; + if (c->isfullscreen) { + c->isfloating = c->oldstate; + c->bw = c->oldbw; + c->x = c->oldx; + c->y = c->oldy; + c->w = c->oldw; + c->h = c->oldh; + resizeclient(c, c->x, c->y, c->w, c->h); + } + c->isfullscreen = 0; + } + setfullscreen(c, !c->isfullscreen); } \ No newline at end of file