X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fshell.c;h=c884f16e1dc34d3ea60ae418358e43aa47e36372;hb=794a54e763b293da7743c23311c276601554c759;hp=5561898b2c76f183eddc614830555aa2eddfeb92;hpb=7854caaca193dbc68c7384f21233a1637ab0382e;p=src%2Fagl-compositor.git diff --git a/src/shell.c b/src/shell.c index 5561898..c884f16 100644 --- a/src/shell.c +++ b/src/shell.c @@ -264,7 +264,7 @@ ivi_check_pending_desktop_surface_popup(struct ivi_surface *surface) const char *_app_id = weston_desktop_surface_get_app_id(surface->dsurface); - if (wl_list_empty(&ivi->popup_pending_apps)) + if (wl_list_empty(&ivi->popup_pending_apps) || !_app_id) return false; wl_list_for_each_safe(p_popup, next_p_popup, @@ -295,7 +295,7 @@ ivi_check_pending_desktop_surface_split(struct ivi_surface *surface) const char *_app_id = weston_desktop_surface_get_app_id(surface->dsurface); - if (wl_list_empty(&ivi->split_pending_apps)) + if (wl_list_empty(&ivi->split_pending_apps) || !_app_id) return false; wl_list_for_each_safe(split_surf, next_split_surf, @@ -319,7 +319,7 @@ ivi_check_pending_desktop_surface_fullscreen(struct ivi_surface *surface) const char *_app_id = weston_desktop_surface_get_app_id(surface->dsurface); - if (wl_list_empty(&ivi->fullscreen_pending_apps)) + if (wl_list_empty(&ivi->fullscreen_pending_apps) || !_app_id) return false; wl_list_for_each_safe(fs_surf, next_fs_surf, @@ -342,7 +342,7 @@ ivi_check_pending_desktop_surface_remote(struct ivi_surface *surface) const char *_app_id = weston_desktop_surface_get_app_id(surface->dsurface); - if (wl_list_empty(&ivi->remote_pending_apps)) + if (wl_list_empty(&ivi->remote_pending_apps) || !_app_id) return false; wl_list_for_each_safe(remote_surf, next_remote_surf, @@ -366,24 +366,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; } @@ -789,8 +793,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) { @@ -949,6 +952,17 @@ bind_agl_shell(struct wl_client *client, { struct ivi_compositor *ivi = data; struct wl_resource *resource; + struct ivi_policy *policy; + void *interface; + + policy = ivi->policy; + interface = (void *) &agl_shell_interface; + if (policy && policy->api.shell_bind_interface && + !policy->api.shell_bind_interface(client, interface)) { + wl_client_post_implementation_error(client, + "client not authorized to use agl_shell"); + return; + } resource = wl_resource_create(client, &agl_shell_interface, 1, id); @@ -991,8 +1005,20 @@ bind_agl_shell_desktop(struct wl_client *client, { struct ivi_compositor *ivi = data; struct wl_resource *resource; - struct desktop_client *dclient = zalloc(sizeof(*dclient)); + struct ivi_policy *policy; + struct desktop_client *dclient; + void *interface; + + policy = ivi->policy; + interface = (void *) &agl_shell_desktop_interface; + if (policy && policy->api.shell_bind_interface && + !policy->api.shell_bind_interface(client, interface)) { + wl_client_post_implementation_error(client, + "client not authorized to use agl_shell_desktop"); + return; + } + dclient = zalloc(sizeof(*dclient)); if (!dclient) { wl_client_post_no_memory(client); return;