X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fdesktop.c;h=e492414561a1c707a7fd6c7207f17d540a8e275e;hb=e9d9ca27950e270bc89a33e7543bd390c5ecc149;hp=dfcc24dce5d3d8f5f78a77ac0a12ed28e486c44c;hpb=c42f50b567a0d5adf2c51322d4d46e33ce4ccb59;p=src%2Fagl-compositor.git diff --git a/src/desktop.c b/src/desktop.c index dfcc24d..e492414 100644 --- a/src/desktop.c +++ b/src/desktop.c @@ -289,8 +289,9 @@ desktop_surface_removed(struct weston_desktop_surface *dsurface, void *userdata) * the DESKTOP role can happen here as well, because we can fall-back * to that when we try to determine the role type. Application that * do not set the app_id will be land here, when destroyed */ - if (output == NULL && (surface->role == IVI_SURFACE_ROLE_NONE || - surface->role == IVI_SURFACE_ROLE_DESKTOP)) + if ((output == NULL && (surface->role == IVI_SURFACE_ROLE_NONE || + surface->role == IVI_SURFACE_ROLE_DESKTOP)) || + output->output == NULL) goto skip_output_asignment; assert(output != NULL); @@ -366,7 +367,7 @@ skip_output_asignment: weston_log("Removed surface %p, app_id %s, role %s\n", surface, app_id, ivi_layout_get_surface_role_name(surface)); - if (app_id && output) { + if (app_id && output && output->output) { shell_advertise_app_state(output->ivi, app_id, NULL, AGL_SHELL_DESKTOP_APP_STATE_DESTROYED); if (output->ivi->shell_client.ready) @@ -392,11 +393,16 @@ desktop_committed(struct weston_desktop_surface *dsurface, return; if (ivi->shell_client.ready && !surface->checked_pending) { - const char * app_id = weston_desktop_surface_get_app_id(dsurface); + struct ivi_output *remote_output = NULL; + const char *app_id = weston_desktop_surface_get_app_id(dsurface); weston_log("Checking pending surface %p, app_id %s\n", surface, app_id); wl_list_remove(&surface->link); wl_list_init(&surface->link); + + if ((remote_output = ivi_layout_find_with_app_id(app_id, ivi))) + ivi_set_pending_desktop_surface_remote(remote_output, app_id); + ivi_check_pending_desktop_surface(surface); surface->checked_pending = true; @@ -530,6 +536,7 @@ ivi_shell_destroy(struct wl_listener *listener, void *data) ivi_shell_finalize(ivi); ivi_compositor_destroy_pending_surfaces(ivi); + ivi_layout_destroy_saved_outputs(ivi); weston_desktop_destroy(ivi->desktop); wl_list_remove(&listener->link);