Reapply "place child clients above fullscreen clients"
This reverts commit 043ab3ac13.
			
			
This commit is contained in:
		
							
								
								
									
										12
									
								
								client.h
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								client.h
									
									
									
									
									
								
							| @@ -183,6 +183,18 @@ client_get_parent(Client *c) | ||||
| 	return p; | ||||
| } | ||||
|  | ||||
| static inline int | ||||
| client_has_children(Client *c) | ||||
| { | ||||
| #ifdef XWAYLAND | ||||
| 	if (client_is_x11(c)) | ||||
| 		return !wl_list_empty(&c->surface.xwayland->children); | ||||
| #endif | ||||
| 	/* surface.xdg->link is never empty because it always contains at least the | ||||
| 	 * surface itself. */ | ||||
| 	return wl_list_length(&c->surface.xdg->link) > 1; | ||||
| } | ||||
|  | ||||
| static inline const char * | ||||
| client_get_title(Client *c) | ||||
| { | ||||
|   | ||||
							
								
								
									
										13
									
								
								dwl.c
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								dwl.c
									
									
									
									
									
								
							| @@ -1427,7 +1427,7 @@ focusstack(const Arg *arg) | ||||
| { | ||||
| 	/* Focus the next or previous client (in tiling order) on selmon */ | ||||
| 	Client *c, *sel = focustop(selmon); | ||||
| 	if (!sel || sel->isfullscreen) | ||||
| 	if (!sel || (sel->isfullscreen && !client_has_children(sel))) | ||||
| 		return; | ||||
| 	if (arg->i > 0) { | ||||
| 		wl_list_for_each(c, &sel->link, link) { | ||||
| @@ -1685,7 +1685,8 @@ void | ||||
| mapnotify(struct wl_listener *listener, void *data) | ||||
| { | ||||
| 	/* Called when the surface is mapped, or ready to display on-screen. */ | ||||
| 	Client *p, *w, *c = wl_container_of(listener, c, map); | ||||
| 	Client *p = NULL; | ||||
| 	Client *w, *c = wl_container_of(listener, c, map); | ||||
| 	Monitor *m; | ||||
| 	int i; | ||||
|  | ||||
| @@ -1741,7 +1742,7 @@ mapnotify(struct wl_listener *listener, void *data) | ||||
| unset_fullscreen: | ||||
| 	m = c->mon ? c->mon : xytomon(c->geom.x, c->geom.y); | ||||
| 	wl_list_for_each(w, &clients, link) { | ||||
| 		if (w != c && w->isfullscreen && m == w->mon && (w->tags & c->tags)) | ||||
| 		if (w != c && w != p && w->isfullscreen && m == w->mon && (w->tags & c->tags)) | ||||
| 			setfullscreen(w, 0); | ||||
| 	} | ||||
| } | ||||
| @@ -2304,12 +2305,14 @@ setcursorshape(struct wl_listener *listener, void *data) | ||||
| void | ||||
| setfloating(Client *c, int floating) | ||||
| { | ||||
| 	Client *p = client_get_parent(c); | ||||
| 	c->isfloating = floating; | ||||
| 	/* If in floating layout do not change the client's layer */ | ||||
| 	if (!c->mon || !client_surface(c)->mapped || !c->mon->lt[c->mon->sellt]->arrange) | ||||
| 		return; | ||||
| 	wlr_scene_node_reparent(&c->scene->node, layers[c->isfullscreen | ||||
| 			? LyrFS : c->isfloating ? LyrFloat : LyrTile]); | ||||
| 	wlr_scene_node_reparent(&c->scene->node, layers[c->isfullscreen || | ||||
| 			(p && p->isfullscreen) ? LyrFS | ||||
| 			: c->isfloating ? LyrFloat : LyrTile]); | ||||
| 	arrange(c->mon); | ||||
| 	printstatus(); | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user