diff options
author | Nobuhiko Tanibata <NOBUHIKO_TANIBATA@xddp.denso.co.jp> | 2014-06-08 03:46:26 -0700 |
---|---|---|
committer | Nobuhiko Tanibata <NOBUHIKO_TANIBATA@xddp.denso.co.jp> | 2014-06-08 23:27:53 +0900 |
commit | 123e528ee202d2adb015b742aadf364270c2f02f (patch) | |
tree | 798c8799cf5d50c8c3cc09f03cbf090cd36f66ba | |
parent | 1092e2cfd9011ea0ffdd7daeb75c3b148c89dfcc (diff) | |
download | weston-123e528ee202d2adb015b742aadf364270c2f02f.tar.gz |
Fix destruction of multiple times for ivi-surface's view.
Signed-off-by: Nobuhiko Tanibata <NOBUHIKO_TANIBATA@xddp.denso.co.jp>
-rw-r--r-- | ivi-shell/ivi-layout.c | 25 |
1 files changed, 25 insertions, 0 deletions
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; } |