ivi-shell: fix ivi_shell_surface lifetime
ivi_shell_surface lifetime shall follow the ivi_surface protocol object lifetime, and frees the ivi-id by destroying the ivi_layout_surface from both wl_surface and ivi_surface destruction as the protocol specifies. Signed-off-by: Nobuhiko Tanibata <NOBUHIKO_TANIBATA@xddp.denso.co.jp> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
This commit is contained in:
parent
6f6c938996
commit
680984234a
|
@ -155,9 +155,18 @@ static void
|
|||
shell_destroy_shell_surface(struct wl_resource *resource)
|
||||
{
|
||||
struct ivi_shell_surface *ivisurf = wl_resource_get_user_data(resource);
|
||||
if (ivisurf != NULL) {
|
||||
ivisurf->resource = NULL;
|
||||
}
|
||||
|
||||
if (ivisurf == NULL)
|
||||
return;
|
||||
|
||||
assert(ivisurf->resource == resource);
|
||||
|
||||
if (ivisurf->layout_surface != NULL)
|
||||
layout_surface_cleanup(ivisurf);
|
||||
|
||||
wl_list_remove(&ivisurf->link);
|
||||
|
||||
free(ivisurf);
|
||||
}
|
||||
|
||||
/* Gets called through the weston_surface destroy signal. */
|
||||
|
@ -172,13 +181,6 @@ shell_handle_surface_destroy(struct wl_listener *listener, void *data)
|
|||
|
||||
if (ivisurf->layout_surface != NULL)
|
||||
layout_surface_cleanup(ivisurf);
|
||||
|
||||
if (ivisurf->resource != NULL) {
|
||||
wl_resource_set_user_data(ivisurf->resource, NULL);
|
||||
ivisurf->resource = NULL;
|
||||
}
|
||||
free(ivisurf);
|
||||
|
||||
}
|
||||
|
||||
/* Gets called, when a client sends ivi_surface.destroy request. */
|
||||
|
|
Loading…
Reference in New Issue