forked from mirror/dwl
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
This commit is contained in:
parent
86ba4c8526
commit
707c1710b7
1 changed files with 14 additions and 7 deletions
21
dwl.c
21
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));
|
||||
|
@ -687,10 +686,18 @@ togglefullscreen(const Arg *arg)
|
|||
setfullscreen(sel, !sel->isfullscreen);
|
||||
}
|
||||
|
||||
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));
|
||||
|
|
Loading…
Reference in a new issue