ivi-shell: fix cleanup of desktop surfaces
The ivi-shell keeps track of its surfaces by adding them to the ivi_surface_list to be able to remove them on shutdown. It also creates an ivi_layout_surface for a desktop surface, but does not keep track of these surfaces. During compositor shutdown, libweston prints the following message: BUG: finalizing a layer with views still on it. Fix it by adding the created ivi_layout_surface to the ivi_surface_list to remove the surfaces from the layer during shutdown. Furthermore, remove the ivi_layout_surface from the desktop surface and free it when the desktop surface is destroyed. Signed-off-by: Michael Tretter <m.tretter@pengutronix.de>
This commit is contained in:
parent
160a4ba3ad
commit
266e2e1d48
@ -537,6 +537,8 @@ desktop_surface_added(struct weston_desktop_surface *surface,
|
||||
ivisurf->layout_surface = layout_surface;
|
||||
ivisurf->surface = weston_surf;
|
||||
|
||||
wl_list_insert(&shell->ivi_surface_list, &ivisurf->link);
|
||||
|
||||
/*
|
||||
* initialize list as well as link. The latter allows to use
|
||||
* wl_list_remove() event when this surface is not in another list.
|
||||
@ -557,6 +559,8 @@ desktop_surface_removed(struct weston_desktop_surface *surface,
|
||||
|
||||
assert(ivisurf != NULL);
|
||||
|
||||
weston_desktop_surface_set_user_data(surface, NULL);
|
||||
|
||||
wl_list_for_each_safe(ivisurf_child, tmp, &ivisurf->children_list,
|
||||
children_link) {
|
||||
wl_list_remove(&ivisurf_child->children_link);
|
||||
@ -566,6 +570,10 @@ desktop_surface_removed(struct weston_desktop_surface *surface,
|
||||
|
||||
if (ivisurf->layout_surface)
|
||||
layout_surface_cleanup(ivisurf);
|
||||
|
||||
wl_list_remove(&ivisurf->link);
|
||||
|
||||
free(ivisurf);
|
||||
}
|
||||
|
||||
static void
|
||||
|
Loading…
x
Reference in New Issue
Block a user