summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNobuhiko Tanibata <NOBUHIKO_TANIBATA@xddp.denso.co.jp>2014-06-08 03:46:26 -0700
committerNobuhiko Tanibata <NOBUHIKO_TANIBATA@xddp.denso.co.jp>2014-06-08 23:27:53 +0900
commit123e528ee202d2adb015b742aadf364270c2f02f (patch)
tree798c8799cf5d50c8c3cc09f03cbf090cd36f66ba
parent1092e2cfd9011ea0ffdd7daeb75c3b148c89dfcc (diff)
downloadweston-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.c25
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;
}