dwl

My patch set and modifications to dwl
git clone git://git.ethandl.dev/dwl
Log | Files | Refs | README | LICENSE

commit 707c1710b7df87ee61db26b325eaa6529beba9ac
parent 86ba4c8526d8b96eb0caaa60f8f42edb51b2b558
Author: Stivvo <stivvo01@gmail.com>
Date:   Thu, 24 Dec 2020 01:02:45 +0100

quitallfullscreen() even when enabling fullscreen

Disable fullscreen on all visible clients in that monitor also before
enabling it on another client.

quitallfullscreen() is reintroduced becouse is now more useful

set c->isfullscreen later to avoid making quitallfullscreen() disable
fullscreen on the current client

Diffstat:
Mdwl.c | 21++++++++++++++-------
1 file changed, 14 insertions(+), 7 deletions(-)

diff --git a/dwl.c b/dwl.c @@ -220,6 +220,7 @@ static void moveresize(const Arg *arg); static void pointerfocus(Client *c, struct wlr_surface *surface, double sx, double sy, uint32_t time); static void quit(const Arg *arg); +static void quitallfullscreen(); static void render(struct wlr_surface *surface, int sx, int sy, void *data); static void renderclients(Monitor *m, struct timespec *now); static void rendermon(struct wl_listener *listener, void *data); @@ -588,9 +589,7 @@ createnotify(struct wl_listener *listener, void *data) if (xdg_surface->role != WLR_XDG_SURFACE_ROLE_TOPLEVEL) return; - wl_list_for_each(c, &clients, link) - if (c->isfullscreen && VISIBLEON(c, c->mon)) - setfullscreen(c, 0); + quitallfullscreen(); /* Allocate a Client for this surface */ c = xdg_surface->data = calloc(1, sizeof(*c)); @@ -688,9 +687,17 @@ togglefullscreen(const Arg *arg) } void +quitallfullscreen() +{ + Client *c; + wl_list_for_each(c, &clients, link) + if (c->isfullscreen && VISIBLEON(c, selmon)) + setfullscreen(c, 0); +} + +void setfullscreen(Client *c, int fullscreen) { - c->isfullscreen = fullscreen; c->bw = (1 - fullscreen) * borderpx; #ifdef XWAYLAND @@ -702,6 +709,7 @@ setfullscreen(Client *c, int fullscreen) // restore previous size instead of arrange to work with floating windows if (fullscreen) { + quitallfullscreen(); c->prevx = c->geom.x; c->prevy = c->geom.y; c->prevheight = c->geom.height; @@ -710,6 +718,7 @@ setfullscreen(Client *c, int fullscreen) } else { resize(c, c->prevx, c->prevy, c->prevwidth, c->prevheight, 0); } + c->isfullscreen = fullscreen; } void @@ -1864,9 +1873,7 @@ createnotifyx11(struct wl_listener *listener, void *data) { struct wlr_xwayland_surface *xwayland_surface = data; Client *c; - wl_list_for_each(c, &clients, link) - if (c->isfullscreen && VISIBLEON(c, c->mon)) - setfullscreen(c, 0); + quitallfullscreen(); /* Allocate a Client for this surface */ c = xwayland_surface->data = calloc(1, sizeof(*c));