X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fshell.c;h=bf143020d676afeeca51e30c57bcc130433ec819;hb=26e72fa379d1b1c0c131cbc85e46d371c3d926ef;hp=0ecdb5e88a2bca2cd569dbb07b692c239e644a45;hpb=9e9c768ad6360ef5616f6aa87064975899802f9f;p=src%2Fagl-compositor.git diff --git a/src/shell.c b/src/shell.c index 0ecdb5e..bf14302 100644 --- a/src/shell.c +++ b/src/shell.c @@ -243,7 +243,13 @@ ivi_ensure_popup(struct ivi_output *ioutput, int x, int y, int bx, int by, struct pending_popup *p_popup = zalloc(sizeof(*p_popup)); size_t len_app_id = strlen(app_id); + if (!p_popup) + return NULL; p_popup->app_id = zalloc(sizeof(char) * (len_app_id + 1)); + if (!p_popup->app_id) { + free(p_popup); + return NULL; + } memcpy(p_popup->app_id, app_id, len_app_id); p_popup->ioutput = ioutput; p_popup->x = x; @@ -270,6 +276,8 @@ ivi_update_popup(struct ivi_output *ioutput, int x, int y, int bx, int by, free(p_popup->app_id); p_popup->app_id = zalloc(sizeof(char) * (len_app_id + 1)); + if (!p_popup->app_id) + return; memcpy(p_popup->app_id, app_id, len_app_id); p_popup->ioutput = ioutput; @@ -288,7 +296,13 @@ ivi_ensure_fullscreen(struct ivi_output *ioutput, const char *app_id) struct pending_fullscreen *p_fullscreen = zalloc(sizeof(*p_fullscreen)); size_t len_app_id = strlen(app_id); + if (!p_fullscreen) + return NULL; p_fullscreen->app_id = zalloc(sizeof(char) * (len_app_id + 1)); + if (!p_fullscreen->app_id) { + free(p_fullscreen); + return NULL; + } memcpy(p_fullscreen->app_id, app_id, len_app_id); p_fullscreen->ioutput = ioutput; @@ -308,6 +322,8 @@ ivi_update_fullscreen(struct ivi_output *ioutput, const char *app_id, free(p_fullscreen->app_id); p_fullscreen->app_id = zalloc(sizeof(char) * (len_app_id + 1)); + if (!p_fullscreen->app_id) + return; memcpy(p_fullscreen->app_id, app_id, len_app_id); p_fullscreen->ioutput = ioutput; @@ -319,7 +335,13 @@ ivi_ensure_remote(struct ivi_output *ioutput, const char *app_id) struct pending_remote *p_remote = zalloc(sizeof(*p_remote)); size_t len_app_id = strlen(app_id); + if (!p_remote) + return NULL; p_remote->app_id = zalloc(sizeof(char) * (len_app_id + 1)); + if (!p_remote->app_id) { + free(p_remote); + return NULL; + } memcpy(p_remote->app_id, app_id, len_app_id); p_remote->ioutput = ioutput; @@ -339,6 +361,8 @@ ivi_update_remote(struct ivi_output *ioutput, const char *app_id, free(p_remote->app_id); p_remote->app_id = zalloc(sizeof(char) * (len_app_id + 1)); + if (!p_remote->app_id) + return; memcpy(p_remote->app_id, app_id, len_app_id); p_remote->ioutput = ioutput; @@ -360,6 +384,8 @@ ivi_set_pending_desktop_surface_popup(struct ivi_output *ioutput, int x, int y, p_popup = ivi_ensure_popup(ioutput, x, y, bx, by, width, height, app_id); else ivi_update_popup(ioutput, x, y, bx, by, width, height, app_id, p_popup); + if (!p_popup) + return; wl_list_insert(&ivi->popup_pending_apps, &p_popup->link); } @@ -381,6 +407,8 @@ ivi_set_pending_desktop_surface_fullscreen(struct ivi_output *ioutput, else ivi_update_fullscreen(ioutput, app_id, p_fullscreen); + if (!p_fullscreen) + return; wl_list_insert(&ivi->fullscreen_pending_apps, &p_fullscreen->link); } @@ -405,7 +433,13 @@ ivi_set_pending_desktop_surface_split(struct ivi_output *ioutput, return; split = zalloc(sizeof(*split)); + if (!split) + return; split->app_id = zalloc(sizeof(char) * (len_app_id + 1)); + if (!split->app_id) { + free(split); + return; + } memcpy(split->app_id, app_id, len_app_id); split->ioutput = ioutput; @@ -430,6 +464,8 @@ ivi_set_pending_desktop_surface_remote(struct ivi_output *ioutput, p_remote = ivi_ensure_remote(ioutput, app_id); else ivi_update_remote(ioutput, app_id, p_remote); + if (!p_remote) + return; wl_list_insert(&ivi->remote_pending_apps, &remote->link); } @@ -577,9 +613,9 @@ ivi_check_pending_desktop_surface_remote(struct ivi_surface *surface) return false; } - -bool -ivi_check_pending_surface(struct ivi_surface *surface) +void +ivi_check_pending_surface_desktop(struct ivi_surface *surface, + enum ivi_surface_role *role) { struct ivi_compositor *ivi = surface->ivi; struct wl_list *role_pending_list; @@ -590,39 +626,45 @@ ivi_check_pending_surface(struct ivi_surface *surface) const char *app_id = weston_desktop_surface_get_app_id(surface->dsurface); - if (!app_id) - return false; + if (!app_id) { + *role = IVI_SURFACE_ROLE_NONE; + return; + } role_pending_list = &ivi->popup_pending_apps; wl_list_for_each(p_popup, role_pending_list, link) { if (!strcmp(app_id, p_popup->app_id)) { - return true; + *role = IVI_SURFACE_ROLE_POPUP; + return; } } role_pending_list = &ivi->split_pending_apps; wl_list_for_each(p_split, role_pending_list, link) { if (!strcmp(app_id, p_split->app_id)) { - return true; + *role = IVI_SURFACE_ROLE_SPLIT_V; + return; } } role_pending_list = &ivi->fullscreen_pending_apps; wl_list_for_each(p_fullscreen, role_pending_list, link) { if (!strcmp(app_id, p_fullscreen->app_id)) { - return true; + *role = IVI_SURFACE_ROLE_FULLSCREEN; + return; } } role_pending_list = &ivi->remote_pending_apps; wl_list_for_each(p_remote, role_pending_list, link) { if (!strcmp(app_id, p_remote->app_id)) { - return true; + *role = IVI_SURFACE_ROLE_REMOTE; + return; } } /* else, we are a regular desktop surface */ - return false; + *role = IVI_SURFACE_ROLE_DESKTOP; } @@ -840,15 +882,23 @@ create_black_surface_view(struct ivi_output *output) return; surface = weston_surface_create(wc); + if (!surface) + return; view = weston_view_create(surface); - - assert(view || surface); + if (!view) { + weston_surface_destroy(surface); + return; + } weston_surface_set_color(surface, 0.0, 0.0, 0.0, 1); weston_surface_set_size(surface, woutput->width, woutput->height); weston_view_set_position(view, woutput->x, woutput->y); output->fullscreen_view.fs = zalloc(sizeof(struct ivi_surface)); + if (!output->fullscreen_view.fs) { + weston_surface_destroy(surface); + return; + } output->fullscreen_view.fs->view = view; output->fullscreen_view.fs_destroy.notify = destroy_black_view;