Commit 4df790e5 authored by Giulio Camuffo's avatar Giulio Camuffo Committed by Kristian Høgsberg

compositor: when unmapping a surface remove it from the compositor's list

compositor.surface_list is recreated every redraw with the mapped
surfaces, but if a surface gets unmapped and then in the same frame
weston_compositor_pick_surface() is called we must make sure it
does not pick the unmapped surface, since it traverses the
surface_list to find one.
If after the unmap the surface gets also deleted it's even more
important, as it must not pick a destroyed surface.
parent eeefc9e3
...@@ -1054,6 +1054,8 @@ weston_surface_unmap(struct weston_surface *surface) ...@@ -1054,6 +1054,8 @@ weston_surface_unmap(struct weston_surface *surface)
weston_surface_damage_below(surface); weston_surface_damage_below(surface);
surface->output = NULL; surface->output = NULL;
wl_list_remove(&surface->layer_link); wl_list_remove(&surface->layer_link);
wl_list_remove(&surface->link);
wl_list_init(&surface->link);
wl_list_for_each(seat, &surface->compositor->seat_list, link) { wl_list_for_each(seat, &surface->compositor->seat_list, link) {
if (seat->keyboard && seat->keyboard->focus == surface) if (seat->keyboard && seat->keyboard->focus == surface)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment