mirror of
				https://codeberg.org/dwl/dwl.git
				synced 2025-11-03 09:01:45 -05:00 
			
		
		
		
	improve floating detection
mostly copied from sway
This commit is contained in:
		
							parent
							
								
									0662bc5a69
								
							
						
					
					
						commit
						4276410a3d
					
				
					 1 changed files with 28 additions and 7 deletions
				
			
		
							
								
								
									
										35
									
								
								client.h
									
										
									
									
									
								
							
							
						
						
									
										35
									
								
								client.h
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -91,16 +91,37 @@ client_get_title(Client *c)
 | 
			
		|||
static inline int
 | 
			
		||||
client_is_float_type(Client *c)
 | 
			
		||||
{
 | 
			
		||||
	struct wlr_xdg_toplevel *toplevel;
 | 
			
		||||
	struct wlr_xdg_toplevel_state state;
 | 
			
		||||
 | 
			
		||||
#ifdef XWAYLAND
 | 
			
		||||
	if (client_is_x11(c))
 | 
			
		||||
		for (size_t i = 0; i < c->surface.xwayland->window_type_len; i++)
 | 
			
		||||
			if (c->surface.xwayland->window_type[i] == netatom[NetWMWindowTypeDialog] ||
 | 
			
		||||
					c->surface.xwayland->window_type[i] == netatom[NetWMWindowTypeSplash] ||
 | 
			
		||||
					c->surface.xwayland->window_type[i] == netatom[NetWMWindowTypeToolbar] ||
 | 
			
		||||
					c->surface.xwayland->window_type[i] == netatom[NetWMWindowTypeUtility])
 | 
			
		||||
	if (client_is_x11(c)) {
 | 
			
		||||
		struct wlr_xwayland_surface *surface = c->surface.xwayland;
 | 
			
		||||
		struct wlr_xwayland_surface_size_hints *size_hints;
 | 
			
		||||
		if (surface->modal)
 | 
			
		||||
			return 1;
 | 
			
		||||
 | 
			
		||||
		for (size_t i = 0; i < surface->window_type_len; i++)
 | 
			
		||||
			if (surface->window_type[i] == netatom[NetWMWindowTypeDialog] ||
 | 
			
		||||
					surface->window_type[i] == netatom[NetWMWindowTypeSplash] ||
 | 
			
		||||
					surface->window_type[i] == netatom[NetWMWindowTypeToolbar] ||
 | 
			
		||||
					surface->window_type[i] == netatom[NetWMWindowTypeUtility])
 | 
			
		||||
				return 1;
 | 
			
		||||
 | 
			
		||||
		size_hints = surface->size_hints;
 | 
			
		||||
		if (size_hints && size_hints->min_width > 0 && size_hints->min_height > 0
 | 
			
		||||
				&& (size_hints->max_width == size_hints->min_width ||
 | 
			
		||||
				size_hints->max_height == size_hints->min_height))
 | 
			
		||||
			return 1;
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
	return 0;
 | 
			
		||||
 | 
			
		||||
	toplevel = c->surface.xdg->toplevel;
 | 
			
		||||
	state = toplevel->current;
 | 
			
		||||
	return (state.min_width != 0 && state.min_height != 0
 | 
			
		||||
		&& (state.min_width == state.max_width
 | 
			
		||||
		|| state.min_height == state.max_height))
 | 
			
		||||
		|| toplevel->parent;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline int
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue