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:
		
							
								
								
									
										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)); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user