struct _E_Comp_Data
{
E_Comp_Wl_Data base;
- E_Compositor *compositor;
struct wl_listener client_created;
};
ds_log_init(DS_DBG, _e_comp_wl_ds_log_handler);
- comp_data->compositor = e_compositor_create(comp_wl->wl.disp);
- if (!comp_data->compositor)
+ if (!e_compositor_init(comp_wl->wl.disp))
{
ERR("Failed to initialize compositor");
goto comp_err;
return e_comp_wl;
}
-EINTERN E_Compositor *
-e_comp_wl_compositor_get(E_Comp_Wl_Data *e_comp_wl)
-{
- return ((E_Comp_Data *)e_comp_wl)->compositor;
-}
-
static void
e_comp_wl_surface_event_simple_free(void *d EINA_UNUSED, E_Event_Client *ev)
{
static void _ds_subsurface_position_set(struct ds_subsurface *ds_subsurface, int x, int y);
static const char *e_comp_wl_subsurface_role_name = "ds_subsurface";
+static E_Compositor *e_compositor;
-EINTERN E_Compositor *
-e_compositor_create(struct wl_display *display)
+EINTERN Eina_Bool
+e_compositor_init(struct wl_display *display)
{
E_Compositor *comp;
+ if (e_compositor)
+ return EINA_TRUE;
+
comp = E_NEW(E_Compositor, 1);
if (!comp)
- return NULL;
+ return EINA_FALSE;
comp->ds_compositor = ds_compositor_create(display);
if (!comp->ds_compositor)
{
ERR("Could not create ds_compositor");
free(comp);
- return NULL;
+ return EINA_FALSE;
}
comp->ds_subcompositor = ds_subcompositor_create(display);
{
ERR("Could not create ds_subcompositor");
free(comp);
- return NULL;
+ return EINA_FALSE;
}
if (!_e_compositor_surface_exporter_init(comp, display))
{
ERR("Could not initialize surface exporter");
free(comp);
- return NULL;
+ return EINA_FALSE;
}
comp->new_surface.notify = _e_compositor_cb_new_surface;
comp->display_destroy.notify = _e_compositor_cb_display_destroy;
wl_display_add_destroy_listener(display, &comp->display_destroy);
- return comp;
+ e_compositor = comp;
+
+ return EINA_TRUE;
}
EINTERN uint32_t
-e_compositor_surface_export(E_Compositor *compositor, E_Surface *surface)
+e_compositor_surface_export(E_Surface *surface)
{
struct ds_tizen_exported_surface *exported_surface;
+ EINA_SAFETY_ON_NULL_RETURN_VAL(e_compositor, E_SURFACE_INVALID_EXPORTED_ID);
+
if (!surface->ds_surface)
return E_SURFACE_INVALID_EXPORTED_ID;
- exported_surface = ds_tizen_surface_exporter_export_surface(compositor->surface_exporter, surface->ds_surface);
+ exported_surface = ds_tizen_surface_exporter_export_surface(e_compositor->surface_exporter, surface->ds_surface);
if (!exported_surface)
return E_SURFACE_INVALID_EXPORTED_ID;
}
EINTERN E_Surface *
-e_compositor_exported_surface_lookup(E_Compositor *comp, uint32_t id)
+e_compositor_exported_surface_lookup(uint32_t id)
{
- return eina_hash_find(comp->exported_surfaces, &id);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(e_compositor, NULL);
+
+ return eina_hash_find(e_compositor->exported_surfaces, &id);
}
EINTERN E_Subsurface *
static void
_e_compositor_cb_display_destroy(struct wl_listener *listener, void *data EINA_UNUSED)
{
- E_Compositor *comp = wl_container_of(listener, comp, display_destroy);
-
- _e_compositor_surface_exporter_finalize(comp);
- wl_list_remove(&comp->display_destroy.link);
- wl_list_remove(&comp->new_surface.link);
- e_client_hook_del(comp->new_client_hook);
- free(comp);
+ _e_compositor_surface_exporter_finalize(e_compositor);
+ wl_list_remove(&e_compositor->display_destroy.link);
+ wl_list_remove(&e_compositor->new_surface.link);
+ e_client_hook_del(e_compositor->new_client_hook);
+ E_FREE(e_compositor);
}
static E_Client *
typedef struct _E_Surface E_Surface;
typedef struct _E_Subsurface E_Subsurface;
-E_Compositor *e_compositor_create(struct wl_display *display);
-uint32_t e_compositor_surface_export(E_Compositor *compositor, E_Surface *surface);
-E_Surface *e_compositor_exported_surface_lookup(E_Compositor *compositor, uint32_t id);
+Eina_Bool e_compositor_init(struct wl_display *display);
+uint32_t e_compositor_surface_export(E_Surface *surface);
+E_Surface *e_compositor_exported_surface_lookup(uint32_t id);
E_Surface *e_surface_from_resource(struct wl_resource *surface_resource);
E_Surface *e_surface_from_ec(E_Client *ec);
E_Video_Shell *shell = wl_resource_get_user_data(resource);
E_Video_Viewport *viewport;
uint32_t id = 0;
- E_Compositor *compositor;
viewport = eina_hash_find(shell->viewports, handle);
if (!viewport)
goto end;
- compositor = e_comp_wl_compositor_get(e_comp_wl_get());
- id = e_compositor_surface_export(compositor, e_subsurface_surface_get(viewport->subsurface));
-
+ id = e_compositor_surface_export(e_subsurface_surface_get(viewport->subsurface));
end:
VS_INF("SHELL %p| Send global resource id(%d) of handle(%s)", shell, id, handle);
wtz_video_shell_send_global_resource_id(resource, id);