summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStivvo <stivvo01@gmail.com>2020-12-24 01:02:45 +0100
committerStivvo <stivvo01@gmail.com>2020-12-24 12:29:44 +0100
commit707c1710b7df87ee61db26b325eaa6529beba9ac (patch)
tree0a170dc10996b067f122a6f03b2bdc312180706c
parent86ba4c8526d8b96eb0caaa60f8f42edb51b2b558 (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
-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));