From 123e528ee202d2adb015b742aadf364270c2f02f Mon Sep 17 00:00:00 2001 From: Nobuhiko Tanibata Date: Sun, 8 Jun 2014 03:46:26 -0700 Subject: Fix destruction of multiple times for ivi-surface's view. Signed-off-by: Nobuhiko Tanibata --- ivi-shell/ivi-layout.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/ivi-shell/ivi-layout.c b/ivi-shell/ivi-layout.c index 35b82a52..f8aaba9e 100644 --- a/ivi-shell/ivi-layout.c +++ b/ivi-shell/ivi-layout.c @@ -416,6 +416,18 @@ westonsurface_destroy_from_ivisurface(struct wl_listener *listener, void *data) ivisurf = container_of(listener, struct ivi_layout_surface, surface_destroy_listener); + + wl_list_init(&ivisurf->surface_rotation.link); + wl_list_init(&ivisurf->layer_rotation.link); + wl_list_init(&ivisurf->surface_pos.link); + wl_list_init(&ivisurf->layer_pos.link); + wl_list_init(&ivisurf->scaling.link); + + if (!wl_list_empty(&ivisurf->view->layer_link)) { + wl_list_remove(&ivisurf->view->layer_link); + wl_list_init(&ivisurf->view->layer_link); + } + ivisurf->surface = NULL; ivisurf->view = NULL; ivi_layout_surfaceRemove(ivisurf); @@ -2673,6 +2685,19 @@ ivi_layout_surfaceSetNativeContent(struct weston_surface *surface, wl_list_remove(&ivisurf->surface_destroy_listener.link); ivisurf->surface = NULL; + + wl_list_remove(&ivisurf->surface_rotation.link); + wl_list_remove(&ivisurf->layer_rotation.link); + wl_list_remove(&ivisurf->surface_pos.link); + wl_list_remove(&ivisurf->layer_pos.link); + wl_list_remove(&ivisurf->scaling.link); + wl_list_init(&ivisurf->surface_rotation.link); + wl_list_init(&ivisurf->layer_rotation.link); + wl_list_init(&ivisurf->surface_pos.link); + wl_list_init(&ivisurf->layer_pos.link); + wl_list_init(&ivisurf->scaling.link); + + weston_view_destroy(ivisurf->view); ivisurf->view = NULL; } -- cgit v1.2.1