X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fshell.c;h=b09c90947274b55db7a9d331a8ba5cc881ca43db;hb=refs%2Fchanges%2F34%2F25434%2F2;hp=4886a0a4f15f2c74dcd7ae2d54986a03808c1a35;hpb=faea097edab0971709e847193e1bf1837ab8030c;p=src%2Fagl-compositor.git diff --git a/src/shell.c b/src/shell.c index 4886a0a..b09c909 100644 --- a/src/shell.c +++ b/src/shell.c @@ -45,17 +45,25 @@ static void create_black_surface_view(struct ivi_output *output); -static void +void agl_shell_desktop_advertise_application_id(struct ivi_compositor *ivi, struct ivi_surface *surface) { struct desktop_client *dclient; + if (surface->advertised_on_launch) + return; + /* advertise to all desktop clients the new surface */ wl_list_for_each(dclient, &ivi->desktop_clients, link) { const char *app_id = weston_desktop_surface_get_app_id(surface->dsurface); + if (app_id == NULL) { + weston_log("WARNING app_is is null, unable to advertise\n"); + return; + } agl_shell_desktop_send_application(dclient->resource, app_id); + surface->advertised_on_launch = true; } } @@ -366,24 +374,28 @@ ivi_check_pending_desktop_surface(struct ivi_surface *surface) ret = ivi_check_pending_desktop_surface_popup(surface); if (ret) { ivi_set_desktop_surface_popup(surface); + ivi_layout_popup_committed(surface); return; } ret = ivi_check_pending_desktop_surface_split(surface); if (ret) { ivi_set_desktop_surface_split(surface); + ivi_layout_split_committed(surface); return; } ret = ivi_check_pending_desktop_surface_fullscreen(surface); if (ret) { ivi_set_desktop_surface_fullscreen(surface); + ivi_layout_fullscreen_committed(surface); return; } ret = ivi_check_pending_desktop_surface_remote(surface); if (ret) { ivi_set_desktop_surface_remote(surface); + ivi_layout_desktop_committed(surface); return; } @@ -438,6 +450,10 @@ ivi_shell_advertise_xdg_surfaces(struct ivi_compositor *ivi, struct wl_resource wl_list_for_each(surface, &ivi->surfaces, link) { const char *app_id = weston_desktop_surface_get_app_id(surface->dsurface); + if (app_id == NULL) { + weston_log("WARNING app_is is null, unable to advertise\n"); + return; + } agl_shell_desktop_send_application(resource, app_id); } } @@ -565,6 +581,9 @@ create_black_surface_view(struct ivi_output *output) struct weston_compositor *wc= ivi->compositor; struct weston_output *woutput = output->output; + if (!woutput) + return; + surface = weston_surface_create(wc); view = weston_view_create(surface); @@ -612,9 +631,9 @@ insert_black_surface(struct ivi_output *output) { struct weston_view *view; - if (!output && + if ((!output && !output->fullscreen_view.fs && - !output->fullscreen_view.fs->view) { + !output->fullscreen_view.fs->view) || !output->output) { weston_log("Output %s doesn't have a surface installed!\n", output->name); return; } @@ -789,8 +808,7 @@ shell_set_panel(struct wl_client *client, weston_desktop_surface_set_size(dsurface, width, height); } - -static void +void shell_advertise_app_state(struct ivi_compositor *ivi, const char *app_id, const char *data, uint32_t app_state) { @@ -804,6 +822,9 @@ shell_advertise_app_state(struct ivi_compositor *ivi, const char *app_id, if (!surf) return; + if (!app_id) + return; + if (policy && policy->api.surface_advertise_state_change && !policy->api.surface_advertise_state_change(surf, surf->ivi)) { return;