diff options
| author | Leonardo Hernández Hernández <leohdz172@protonmail.com> | 2022-12-03 14:31:18 -0600 | 
|---|---|---|
| committer | Leonardo Hernández Hernández <leohdz172@protonmail.com> | 2022-12-05 23:18:01 -0600 | 
| commit | 38bd00351a444d37184716d6124bb47817758bc9 (patch) | |
| tree | e9128dd321ccf93253e0b78f44a0a0bc2b6ae8c6 /client.h | |
| parent | c56bc42eb5480783f3bc97f769bac3d9eebcb373 (diff) | |
merge toplevel_from_{wlr_layer_surface,popup} into client_from_wlr_surface
now it is a big function called toplevel_from_wlr_surface
Diffstat (limited to '')
| -rw-r--r-- | client.h | 108 | 
1 files changed, 47 insertions, 61 deletions
| @@ -16,27 +16,6 @@ client_is_x11(Client *c)  #endif  } -static inline Client * -client_from_wlr_surface(struct wlr_surface *s) -{ -	struct wlr_xdg_surface *surface; - -#ifdef XWAYLAND -	struct wlr_xwayland_surface *xsurface; -	if (s && wlr_surface_is_xwayland_surface(s) -			&& (xsurface = wlr_xwayland_surface_from_wlr_surface(s))) -		return xsurface->data; -#endif -	if (s && wlr_surface_is_xdg_surface(s) -			&& (surface = wlr_xdg_surface_from_wlr_surface(s)) -			&& surface->role == WLR_XDG_SURFACE_ROLE_TOPLEVEL) -		return surface->data; - -	if (s && wlr_surface_is_subsurface(s)) -		return client_from_wlr_surface(wlr_surface_get_root_surface(s)); -	return NULL; -} -  static inline void  client_get_size_hints(Client *c, struct wlr_box *max, struct wlr_box *min)  { @@ -72,6 +51,53 @@ client_surface(Client *c)  	return c->surface.xdg->surface;  } +static inline void * +toplevel_from_wlr_surface(struct wlr_surface *s) +{ +	struct wlr_xdg_surface *xdg_surface; +	struct wlr_surface *root_surface; +	struct wlr_layer_surface_v1 *layer_surface; +#ifdef XWAYLAND +	struct wlr_xwayland_surface *xsurface; +#endif + +	if (!s) +		return NULL; +	root_surface = wlr_surface_get_root_surface(s); + +#ifdef XWAYLAND +	if (wlr_surface_is_xwayland_surface(root_surface) +			&& (xsurface = wlr_xwayland_surface_from_wlr_surface(root_surface))) +		return xsurface->data; +#endif + +	if (wlr_surface_is_layer_surface(root_surface) +			&& (layer_surface = wlr_layer_surface_v1_from_wlr_surface(root_surface))) +		return layer_surface->data; + +	if (wlr_surface_is_xdg_surface(root_surface) +			&& (xdg_surface = wlr_xdg_surface_from_wlr_surface(root_surface))) { +		while (1) { +			switch (xdg_surface->role) { +			case WLR_XDG_SURFACE_ROLE_POPUP: +				if (!xdg_surface->popup->parent) +					return NULL; +				else if (!wlr_surface_is_xdg_surface(xdg_surface->popup->parent)) +					return toplevel_from_wlr_surface(xdg_surface->popup->parent); + +				xdg_surface = wlr_xdg_surface_from_wlr_surface(xdg_surface->popup->parent); +				break; +			case WLR_XDG_SURFACE_ROLE_TOPLEVEL: +					return xdg_surface->data; +			case WLR_XDG_SURFACE_ROLE_NONE: +				return NULL; +			} +		} +	} + +	return NULL; +} +  /* The others */  static inline void  client_activate_surface(struct wlr_surface *s, int activated) @@ -320,43 +346,3 @@ client_wants_fullscreen(Client *c)  #endif  	return c->surface.xdg->toplevel->requested.fullscreen;  } - -static inline void * -toplevel_from_popup(struct wlr_xdg_popup *popup) -{ -	struct wlr_xdg_surface *surface = popup->base; - -	while (1) { -		switch (surface->role) { -		case WLR_XDG_SURFACE_ROLE_POPUP: -			if (!surface->popup->parent) -				return NULL; -			else if (wlr_surface_is_layer_surface(surface->popup->parent)) -				return wlr_layer_surface_v1_from_wlr_surface(surface->popup->parent)->data; -			else if (!wlr_surface_is_xdg_surface(surface->popup->parent)) -				return NULL; - -			surface = wlr_xdg_surface_from_wlr_surface(surface->popup->parent); -			break; -		case WLR_XDG_SURFACE_ROLE_TOPLEVEL: -				return surface->data; -		case WLR_XDG_SURFACE_ROLE_NONE: -			return NULL; -		} -	} -} - -static inline void * -toplevel_from_wlr_layer_surface(struct wlr_surface *s) -{ -	Client *c; -	struct wlr_layer_surface_v1 *wlr_layer_surface; - -	if ((c = client_from_wlr_surface(s))) -		return c; -	else if (s && wlr_surface_is_layer_surface(s) -			&& (wlr_layer_surface = wlr_layer_surface_v1_from_wlr_surface(s))) -		return wlr_layer_surface->data; - -	return NULL; -} | 
