summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dwl.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/dwl.c b/dwl.c
index 8e1e384..5e1591b 100644
--- 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));