From 4df790e505648510ce06636111ce0daf2302ee46 Mon Sep 17 00:00:00 2001 From: Giulio Camuffo Date: Sat, 21 Sep 2013 18:08:28 +0200 Subject: [PATCH] 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. --- src/compositor.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/compositor.c b/src/compositor.c index 35a5605b..f619f827 100644 --- a/src/compositor.c +++ b/src/compositor.c @@ -1054,6 +1054,8 @@ weston_surface_unmap(struct weston_surface *surface) weston_surface_damage_below(surface); surface->output = NULL; 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) { if (seat->keyboard && seat->keyboard->focus == surface)