diff options
| author | Leonardo Hernández Hernández <leohdz172@protonmail.com> | 2022-06-24 19:15:24 -0500 | 
|---|---|---|
| committer | Leonardo Hernández Hernández <leohdz172@protonmail.com> | 2022-06-24 19:19:20 -0500 | 
| commit | 72e0a560d9836c5e8658003f548203bcd722e565 (patch) | |
| tree | 8365d63c2f68b53084998b485dc23359b334f1cc /client.h | |
| parent | 2aa391361c877f3319050e57c828e065a61d9d85 (diff) | |
respect size hints
Diffstat (limited to '')
| -rw-r--r-- | client.h | 83 | 
1 files changed, 38 insertions, 45 deletions
| @@ -81,6 +81,32 @@ client_get_geometry(Client *c, struct wlr_box *geom)  	wlr_xdg_surface_get_geometry(c->surface.xdg, geom);  } +static inline void +client_get_size_hints(Client *c, struct wlr_box *max, struct wlr_box *min) +{ +	struct wlr_xdg_toplevel *toplevel; +	struct wlr_xdg_toplevel_state *state; +#ifdef XWAYLAND +	if (client_is_x11(c)) { +		struct wlr_xwayland_surface_size_hints *size_hints; +		size_hints = c->surface.xwayland->size_hints; +		if (size_hints) { +			max->width = size_hints->max_width; +			max->height = size_hints->max_height; +			min->width = size_hints->min_width; +			min->height = size_hints->min_height; +		} +		return; +	} +#endif +	toplevel = c->surface.xdg->toplevel; +	state = &toplevel->current; +	max->width = state->max_width; +	max->height = state->max_height; +	min->width = state->min_width; +	min->height = state->min_height; +} +  static inline const char *  client_get_title(Client *c)  { @@ -94,39 +120,31 @@ 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; +	struct wlr_box min = {0}, max = {0}; +	client_get_size_hints(c, &max, &min);  #ifdef XWAYLAND  	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]) +			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; - -		return 0; +		return ((min.width > 0 || min.height > 0 || max.width > 0 || max.height > 0) +			&& (min.width == max.width || min.height == max.height)) +			|| c->surface.xwayland->parent;  	}  #endif -	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; +	return ((min.width > 0 || min.height > 0 || max.width > 0 || max.height > 0) +		&& (min.width == max.width || min.height == max.height)) +		|| c->surface.xdg->toplevel->parent;  }  static inline int @@ -207,31 +225,6 @@ client_surface_at(Client *c, double cx, double cy, double *sx, double *sy)  }  static inline void -client_min_size(Client *c, int *width, int *height) -{ -	struct wlr_xdg_toplevel *toplevel; -	struct wlr_xdg_toplevel_state *state; -#ifdef XWAYLAND -	if (client_is_x11(c)) { -		struct wlr_xwayland_surface_size_hints *size_hints; -		size_hints = c->surface.xwayland->size_hints; -		if (size_hints) { -			*width = size_hints->min_width; -			*height = size_hints->min_height; -		} else { -			*width = 0; -			*height = 0; -		} -		return; -	} -#endif -	toplevel = c->surface.xdg->toplevel; -	state = &toplevel->current; -	*width = state->min_width; -	*height = state->min_height; -} - -static inline void  client_restack_surface(Client *c)  {  #ifdef XWAYLAND | 
