diff options
author | Stivvo <stivvo01@gmail.com> | 2020-12-24 01:02:45 +0100 |
---|---|---|
committer | Stivvo <stivvo01@gmail.com> | 2020-12-24 12:29:44 +0100 |
commit | 707c1710b7df87ee61db26b325eaa6529beba9ac (patch) | |
tree | 0a170dc10996b067f122a6f03b2bdc312180706c /dwl.c | |
parent | 86ba4c8526d8b96eb0caaa60f8f42edb51b2b558 (diff) |
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 (limited to 'dwl.c')
-rw-r--r-- | dwl.c | 21 |
1 files changed, 14 insertions, 7 deletions
@@ -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)); |