Fix popups

Fixes the render and container_at order for popups.

Fixes #2210

For rendering:

* render_view_surfaces has been renamed to render_view_toplevels
* render_view_toplevels now uses output_surface_for_each_surface (which
is now public), as that function uses wlr_surface_for_each_surface which
doesn't descend into popups
* Views now have a for_each_popup iterator, which is used by the
renderer to render the focused view's popups
* When rendering a popup, toplevels (xdg subsurfaces) of that popup are
also rendered

For sending frame done, the logic has been updated to match the
rendering logic:

* send_frame_done_container no longer descends into popups
* for_each_popup is used to send frame done to the focused view's popups
and their child toplevels

For container_at:

* floating_container_at is now static, which means it had to be moved
higher in the file.
* container_at now considers popups for the focused view before checking
containers.
* tiling_container_at has been introduced, so that it doesn't call
container_at recursively (it would check popups recursively if it did)
This commit is contained in:
Ryan Dwyer 2018-07-31 18:41:30 +10:00
parent f19add2702
commit de86d65627
10 changed files with 228 additions and 57 deletions

View file

@ -109,9 +109,6 @@ static struct sway_container *container_at_coords(
}
struct sway_container *c;
if ((c = floating_container_at(lx, ly, surface, sx, sy))) {
return c;
}
if ((c = container_at(ws, lx, ly, surface, sx, sy))) {
return c;
}