diff options
author | Marius Vlad <marius.vlad@collabora.com> | 2020-10-22 00:07:53 +0300 |
---|---|---|
committer | Marius Vlad <marius.vlad@collabora.com> | 2020-10-22 19:36:21 +0300 |
commit | c9f38335a74bb847cf3914c12514316c178c4bc1 (patch) | |
tree | d1cc96dad43d68e11514db0a442598ca161c4ac3 | |
parent | d4f4a4e13c6ad0222df2df5b45de6dc60a64a26b (diff) |
shell: Destroy weston_transmitter_surface as wellsandbox/mvlad/add-waltham-support-wip
Instruct waltham-transmitter-plugin that it can destroy its own
surface representation when the weston_surface is also destroyed.
Bug-AGL: SPEC-3601, SPEC-3611
Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
Change-Id: Ie0e5409b21c043b8c98bebb4d77808227ee38aca
-rw-r--r-- | src/desktop.c | 4 | ||||
-rw-r--r-- | src/ivi-compositor.h | 2 | ||||
-rw-r--r-- | src/shell.c | 14 |
3 files changed, 20 insertions, 0 deletions
diff --git a/src/desktop.c b/src/desktop.c index 4caba48..ad1ce44 100644 --- a/src/desktop.c +++ b/src/desktop.c @@ -192,6 +192,10 @@ desktop_surface_removed(struct weston_desktop_surface *dsurface, void *userdata) output->active = NULL; } + if (surface->role == IVI_SURFACE_ROLE_REMOTE && + output->type == OUTPUT_REMOTE) + ivi_destroy_waltham_destroy(surface); + /* check if there's a last 'remote' surface and insert a black * surface view if there's no background set for that output */ diff --git a/src/ivi-compositor.h b/src/ivi-compositor.h index 3dd0c20..189cd8c 100644 --- a/src/ivi-compositor.h +++ b/src/ivi-compositor.h @@ -415,4 +415,6 @@ ivi_seat_reset_caps_sent(struct ivi_compositor *ivi); void agl_shell_desktop_advertise_application_id(struct ivi_compositor *ivi, struct ivi_surface *surface); +void +ivi_destroy_waltham_destroy(struct ivi_surface *surface); #endif diff --git a/src/shell.c b/src/shell.c index 612661f..463d0e6 100644 --- a/src/shell.c +++ b/src/shell.c @@ -107,6 +107,20 @@ ivi_set_desktop_surface_fullscreen(struct ivi_surface *surface) agl_shell_desktop_advertise_application_id(ivi, surface); } +void +ivi_destroy_waltham_destroy(struct ivi_surface *surface) +{ + struct ivi_compositor *ivi = surface->ivi; + const struct weston_transmitter_api *api = + ivi->waltham_transmitter_api; + + if (!api) + return; + + if (surface->waltham_surface.transmitter_surface) + api->surface_destroy(surface->waltham_surface.transmitter_surface); +} + static void ivi_output_notify_waltham_plugin(struct ivi_surface *surface) { |