diff options
| -rw-r--r-- | client.h | 15 | ||||
| -rw-r--r-- | dwl.c | 11 | 
2 files changed, 22 insertions, 4 deletions
| @@ -307,3 +307,18 @@ toplevel_from_popup(struct wlr_xdg_popup *popup)  		}  	}  } + +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; +} @@ -1504,6 +1504,7 @@ motionnotify(uint32_t time)  {  	double sx = 0, sy = 0;  	Client *c = NULL; +	LayerSurface *l;  	struct wlr_surface *surface = NULL;  	struct wlr_drag_icon *icon; @@ -1536,10 +1537,12 @@ motionnotify(uint32_t time)  	xytonode(cursor->x, cursor->y, &surface, &c, NULL, &sx, &sy);  	if (cursor_mode == CurPressed && !seat->drag) { -		surface = seat->pointer_state.focused_surface; -		c = client_from_wlr_surface(surface); -		sx = c ? cursor->x - c->geom.x : 0; -		sy = c ? cursor->y - c->geom.y : 0; +		if ((l = toplevel_from_wlr_layer_surface( +				 seat->pointer_state.focused_surface))) { +			surface = seat->pointer_state.focused_surface; +			sx = cursor->x - l->geom.x; +			sy = cursor->y - l->geom.y; +		}  	}  	/* If there's no client surface under the cursor, set the cursor image to a | 
