X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fdesktop.c;h=ed648c24e16347b6abbcf929249ac62688b3cc49;hb=ffdbb335ee72a5b5cba198800c5537b89d7755a0;hp=f28d0c9dc9f0e3289b8892009a57f582ee2a6555;hpb=0512e7251611e7040c550bb4c6cc972d57b45144;p=src%2Fagl-compositor.git diff --git a/src/desktop.c b/src/desktop.c index f28d0c9..ed648c2 100644 --- a/src/desktop.c +++ b/src/desktop.c @@ -211,8 +211,10 @@ desktop_surface_added(struct weston_desktop_surface *dsurface, void *userdata) app_id = weston_desktop_surface_get_app_id(dsurface); - if ((active_output = ivi_layout_find_with_app_id(app_id, ivi))) + if ((active_output = ivi_layout_find_with_app_id(app_id, ivi))) { ivi_set_pending_desktop_surface_remote(active_output, app_id); + shell_send_app_on_output(ivi, app_id, active_output->output->name); + } /* reset any caps to make sure we apply the new caps */ ivi_seat_reset_caps_sent(ivi); @@ -241,8 +243,9 @@ desktop_surface_added(struct weston_desktop_surface *dsurface, void *userdata) } -static bool -desktop_surface_check_last_surfaces(struct ivi_output *ivi_output, enum ivi_surface_role role) +bool +ivi_surface_count_one(struct ivi_output *ivi_output, + enum ivi_surface_role role) { int count = 0; struct ivi_surface *surf; @@ -289,8 +292,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); @@ -321,15 +325,11 @@ desktop_surface_removed(struct weston_desktop_surface *dsurface, void *userdata) if (ivi_seat && ivi_seat->focused_surface == wsurface) ivi_seat->focused_surface = 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 */ - if (desktop_surface_check_last_surfaces(output, IVI_SURFACE_ROLE_REMOTE) || - desktop_surface_check_last_surfaces(output, IVI_SURFACE_ROLE_DESKTOP)) + if (ivi_surface_count_one(output, IVI_SURFACE_ROLE_REMOTE) || + ivi_surface_count_one(output, IVI_SURFACE_ROLE_DESKTOP)) if (!output->background) insert_black_curtain(output); @@ -366,13 +366,11 @@ 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 (wl_resource_get_version(output->ivi->shell_client.resource) >= AGL_SHELL_APP_STATE_SINCE_VERSION) - agl_shell_send_app_state(output->ivi->shell_client.resource, - app_id, AGL_SHELL_APP_STATE_TERMINATED); + if (output->ivi->shell_client.ready) + shell_send_app_state(output->ivi, app_id, AGL_SHELL_APP_STATE_TERMINATED); } wl_list_remove(&surface->link); @@ -394,20 +392,26 @@ 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); + shell_send_app_on_output(ivi, app_id, remote_output->output->name); + } + + ivi_check_pending_desktop_surface(surface); surface->checked_pending = true; /* we'll do it now at commit time, because we might not have an * appid by the time we've created the weston_desktop_surface * */ - if (wl_resource_get_version(ivi->shell_client.resource) >= AGL_SHELL_APP_STATE_SINCE_VERSION) - agl_shell_send_app_state(ivi->shell_client.resource, - app_id, AGL_SHELL_APP_STATE_STARTED); + shell_send_app_state(ivi, app_id, AGL_SHELL_APP_STATE_STARTED); } if (!surface->advertised_on_launch && @@ -429,9 +433,11 @@ desktop_committed(struct weston_desktop_surface *dsurface, switch (surface->role) { case IVI_SURFACE_ROLE_DESKTOP: - case IVI_SURFACE_ROLE_REMOTE: ivi_layout_desktop_committed(surface); break; + case IVI_SURFACE_ROLE_REMOTE: + ivi_layout_remote_committed(surface); + break; case IVI_SURFACE_ROLE_POPUP: ivi_layout_popup_committed(surface); break; @@ -534,6 +540,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);