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;
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;
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;
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;
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;
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;
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);
}
else
ivi_update_fullscreen(ioutput, app_id, p_fullscreen);
+ if (!p_fullscreen)
+ return;
wl_list_insert(&ivi->fullscreen_pending_apps, &p_fullscreen->link);
}
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;
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);
}
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;
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;
}
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;
return;
}
-#if 0
- if (ivi->shell_client.client != client) {
- wl_resource_post_error(resource, WL_DISPLAY_ERROR_INVALID_OBJECT,
- "client not authorized to use agl_shell");
- return;
- }
-#endif
-
if (ivi->shell_client.resource) {
wl_resource_post_error(resource, WL_DISPLAY_ERROR_INVALID_OBJECT,
"agl_shell has already been bound");