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:
| M | dwl.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));