Fix popup rendering order and popup container_at issues

This adds proper support for popups overhanging their swayc bounds.

For locating a surface at a given coordinate, it iterates all the
floating popups first, then floating toplevels and decorations, then
tiled popups, then tiled toplevels and decorations.

For rendering popups, it renders all toplevels and decorations first,
then popups afterwards.
This commit is contained in:
Ryan Dwyer 2018-06-02 12:58:24 +10:00
parent 0f71547032
commit e84166a734
4 changed files with 159 additions and 46 deletions

View file

@ -169,16 +169,16 @@ struct sway_container *container_parent(struct sway_container *container,
* surface-local coordinates of the given layout coordinates if the container
* is a view and the view contains a surface at those coordinates.
*/
struct sway_container *container_at(struct sway_container *container,
double ox, double oy, struct wlr_surface **surface,
struct sway_container *container_at(struct sway_container *workspace,
double lx, double ly, struct wlr_surface **surface,
double *sx, double *sy);
/**
* Same as container_at, but only checks floating views and expects coordinates
* to be layout coordinates, as that's what floating views use.
* Same as container_at, but only checks for popups only.
*/
struct sway_container *floating_container_at(double lx, double ly,
struct wlr_surface **surface, double *sx, double *sy);
struct sway_container *popup_at(struct sway_container *workspace,
double lx, double ly, struct wlr_surface **surface,
double *sx, double *sy);
/**
* Apply the function for each descendant of the container breadth first.