diff options
Diffstat (limited to '')
| -rw-r--r-- | client.h | 18 | 
1 files changed, 15 insertions, 3 deletions
| @@ -232,10 +232,22 @@ client_min_size(Client *c, int *width, int *height)  }  static inline Client * -client_from_wlr_surface(struct wlr_surface *surface) +client_from_wlr_surface(struct wlr_surface *s)  { -	struct wlr_scene_node *n = surface->data; -	return n ? n->data : NULL; +	struct wlr_xdg_surface *surface; + +#ifdef XWAYLAND +	struct wlr_xwayland_surface *xsurface; +	if (s->role_data && wlr_surface_is_xwayland_surface(s) +			&& (xsurface = wlr_xwayland_surface_from_wlr_surface(s))) +		return xsurface->data; +#endif +	if (s->role_data && wlr_surface_is_xdg_surface(s) +			&& (surface = wlr_xdg_surface_from_wlr_surface(s)) +			&& surface->role == WLR_XDG_SURFACE_ROLE_TOPLEVEL) +		return surface->data; + +	return NULL;  }  static inline Client * | 
