diff options
author | Guido Günther <agx@sigxcpu.org> | 2018-04-19 15:30:39 +0200 |
---|---|---|
committer | Guido Günther <agx@sigxcpu.org> | 2018-04-23 11:24:31 +0200 |
commit | d4cb33c9fccc219c7d66e634618fe07c6daaf18d (patch) | |
tree | 5829a3085821008dd15b1be8ca9749181ae3cf88 /rootston | |
parent | d1e82a8ede200862453e50cb77bf7cd6e1e73d33 (diff) |
rootston: Let layer_surface_at look at popups
This allows them to receive input as well.
Diffstat (limited to 'rootston')
-rw-r--r-- | rootston/desktop.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/rootston/desktop.c b/rootston/desktop.c index 0949b5db..6ac665bc 100644 --- a/rootston/desktop.c +++ b/rootston/desktop.c @@ -641,11 +641,24 @@ static struct wlr_surface *layer_surface_at(struct roots_output *output, struct wl_list *layer, double ox, double oy, double *sx, double *sy) { struct roots_layer_surface *roots_surface; wl_list_for_each_reverse(roots_surface, layer, link) { - struct wlr_surface *wlr_surface = - roots_surface->layer_surface->surface; - double _sx = ox - roots_surface->geo.x; - double _sy = oy - roots_surface->geo.y; - // TODO: Test popups/subsurfaces + struct wlr_surface *wlr_surface; + double _sx, _sy; + struct wlr_xdg_popup *popup; + wl_list_for_each(popup, &roots_surface->layer_surface->popups, link) { + wlr_surface = popup->base->surface; + _sx = ox - roots_surface->geo.x - popup->geometry.x; + _sy = oy - roots_surface->geo.y - popup->geometry.y; + if (wlr_surface_point_accepts_input(wlr_surface, _sx, _sy)) { + *sx = _sx; + *sy = _sy; + return wlr_surface; + } + // TODO: popups can have popups + } + // TODO: Test subsurfaces + wlr_surface = roots_surface->layer_surface->surface; + _sx = ox - roots_surface->geo.x; + _sy = oy - roots_surface->geo.y; if (wlr_surface_point_accepts_input(wlr_surface, _sx, _sy)) { *sx = _sx; *sy = _sy; |