From a44697c37a304c0d4d574b6772775c6936869e24 Mon Sep 17 00:00:00 2001 From: Cedric Bail Date: Mon, 2 Apr 2018 14:55:57 -0700 Subject: [PATCH] ecore_evas: refactor logic for creating Ecore_Evas. --- src/lib/ecore_evas/ecore_evas.c | 49 ++++++++++++-- src/lib/ecore_evas/ecore_evas_private.h | 3 + .../engines/cocoa/ecore_evas_cocoa.c | 16 +---- .../ecore_evas/engines/drm/ecore_evas_drm.c | 18 ++--- .../ecore_evas/engines/extn/ecore_evas_extn.c | 10 +-- .../ecore_evas/engines/fb/ecore_evas_fb.c | 30 +++------ .../ecore_evas/engines/sdl/ecore_evas_sdl.c | 23 +++---- .../wayland/ecore_evas_wayland_common.c | 21 ++---- .../engines/win32/ecore_evas_win32.c | 18 ++--- .../ecore_evas/engines/x/ecore_evas_x.c | 67 +++++++++---------- 10 files changed, 125 insertions(+), 130 deletions(-) diff --git a/src/lib/ecore_evas/ecore_evas.c b/src/lib/ecore_evas/ecore_evas.c index 8e90539d59..9a9fbac69c 100644 --- a/src/lib/ecore_evas/ecore_evas.c +++ b/src/lib/ecore_evas/ecore_evas.c @@ -3746,12 +3746,7 @@ ecore_evas_sub_ecore_evas_list_get(const Ecore_Evas *ee) EAPI void ecore_evas_input_event_register(Ecore_Evas *ee) { - ecore_event_window_register(ee->prop.window, ee, ee->evas, - (Ecore_Event_Mouse_Move_Cb)_ecore_evas_mouse_move_process, - (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process, - (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process, - (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process); - _ecore_event_window_direct_cb_set((Ecore_Window)ee, _ecore_evas_input_direct_cb); + ecore_evas_done(ee, EINA_FALSE); } EAPI void @@ -5089,3 +5084,45 @@ ecore_evas_callback_device_mouse_in_set(Ecore_Evas *ee, IFE; ee->func.fn_device_mouse_in = func; } + +EAPI Evas * +ecore_evas_evas_new(Ecore_Evas *ee, int w, int h) +{ + Evas *e; + + if (ee->evas) return ee->evas; + + e = evas_new(); + if (!e) return NULL; + + ee->evas = e; + evas_data_attach_set(e, ee); + + if (ECORE_EVAS_PORTRAIT(ee)) + { + evas_output_size_set(e, w, h); + evas_output_viewport_set(e, 0, 0, w, h); + } + else + { + evas_output_size_set(e, h, w); + evas_output_viewport_set(e, 0, 0, h, w); + } + + return e; +} + +EAPI void +ecore_evas_done(Ecore_Evas *ee, Eina_Bool single_window) +{ + _ecore_evas_register(ee); + ecore_event_window_register(ee->prop.window, ee, ee->evas, + (Ecore_Event_Mouse_Move_Cb)_ecore_evas_mouse_move_process, + (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process, + (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process, + (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process); + _ecore_event_window_direct_cb_set(ee->prop.window, _ecore_evas_input_direct_cb); + + if (single_window) + evas_event_feed_mouse_in(ee->evas, (unsigned int)((unsigned long long)(ecore_time_get() * 1000.0) & 0xffffffff), NULL); +} diff --git a/src/lib/ecore_evas/ecore_evas_private.h b/src/lib/ecore_evas/ecore_evas_private.h index 14cfae791d..3dbd61ea62 100644 --- a/src/lib/ecore_evas/ecore_evas_private.h +++ b/src/lib/ecore_evas/ecore_evas_private.h @@ -487,6 +487,9 @@ Eina_Bool _ecore_evas_cursors_init(Ecore_Evas *ee); EAPI void ecore_evas_render_wait(Ecore_Evas *ee); EAPI Eina_Bool ecore_evas_render(Ecore_Evas *ee); +EAPI Evas *ecore_evas_evas_new(Ecore_Evas *ee, int w, int h); +EAPI void ecore_evas_done(Ecore_Evas *ee, Eina_Bool single_window); + static inline Eina_Bool ecore_evas_render_prepare(Ecore_Evas *ee) { diff --git a/src/modules/ecore_evas/engines/cocoa/ecore_evas_cocoa.c b/src/modules/ecore_evas/engines/cocoa/ecore_evas_cocoa.c index 75ba1da62c..0a95644580 100644 --- a/src/modules/ecore_evas/engines/cocoa/ecore_evas_cocoa.c +++ b/src/modules/ecore_evas/engines/cocoa/ecore_evas_cocoa.c @@ -561,16 +561,12 @@ ecore_evas_cocoa_new_internal(Ecore_Cocoa_Window *parent EINA_UNUSED, int x, int ee->prop.withdrawn = EINA_TRUE; ee->can_async_render = EINA_FALSE; - ee->evas = evas_new(); + ecore_evas_evas_new(ee, w, h); INF("ecore_evas: %p, evas: %p", ee, ee->evas); if (!ee->evas) goto free_name; - evas_data_attach_set(ee->evas, ee); - evas_output_size_set(ee->evas, w, h); - evas_output_viewport_set(ee->evas, 0, 0, w, h); - ee->prop.window = (Ecore_Window)ecore_cocoa_window_new(x, y, w, h); if (!ee->prop.window) @@ -600,15 +596,7 @@ ecore_evas_cocoa_new_internal(Ecore_Cocoa_Window *parent EINA_UNUSED, int x, int iface->window_get = _ecore_evas_cocoa_window_get; ee->engine.ifaces = eina_list_append(ee->engine.ifaces, iface); - _ecore_evas_register(ee); - ecore_event_window_register(ee->prop.window, ee, ee->evas, - (Ecore_Event_Mouse_Move_Cb)_ecore_evas_mouse_move_process, - (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process, - (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process, - (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process); - _ecore_event_window_direct_cb_set(ee->prop.window, _ecore_evas_input_direct_cb); - - evas_event_feed_mouse_in(ee->evas, (unsigned int)((unsigned long long)(ecore_time_get() * 1000.0) & 0xffffffff), NULL); + ecore_evas_done(ee, EINA_TRUE); return ee; diff --git a/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c b/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c index 5aefe157ac..c1c60f8b15 100644 --- a/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c +++ b/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c @@ -1027,11 +1027,13 @@ _ecore_evas_new_internal(const char *device, int x, int y, int w, int h, Eina_Bo if (getenv("ECORE_EVAS_FORCE_SYNC_RENDER")) ee->can_async_render = 0; - ee->evas = evas_new(); - evas_data_attach_set(ee->evas, ee); + if (!ecore_evas_evas_new(ee, w, h)) + { + ERR("Can not create a Canvas."); + goto eng_err; + } + evas_output_method_set(ee->evas, method); - evas_output_size_set(ee->evas, w, h); - evas_output_viewport_set(ee->evas, 0, 0, w, h); if (ee->can_async_render) evas_event_callback_add(ee->evas, EVAS_CALLBACK_RENDER_POST, @@ -1086,13 +1088,7 @@ _ecore_evas_new_internal(const char *device, int x, int y, int w, int h, Eina_Bo ecore_evas_data_set(ee, "device", edata->dev); - _ecore_evas_register(ee); - ecore_event_window_register(ee->prop.window, ee, ee->evas, - (Ecore_Event_Mouse_Move_Cb)_ecore_evas_mouse_move_process, - (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process, - (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process, - (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process); - _ecore_event_window_direct_cb_set(ee->prop.window, _ecore_evas_input_direct_cb); + ecore_evas_done(ee, EINA_FALSE); ecore_drm2_output_info_get(edata->output, NULL, NULL, &mw, &mh, NULL); diff --git a/src/modules/ecore_evas/engines/extn/ecore_evas_extn.c b/src/modules/ecore_evas/engines/extn/ecore_evas_extn.c index fd4fa7972e..edbcd6f61f 100644 --- a/src/modules/ecore_evas/engines/extn/ecore_evas_extn.c +++ b/src/modules/ecore_evas/engines/extn/ecore_evas_extn.c @@ -2155,11 +2155,13 @@ ecore_evas_extn_socket_new_internal(int w, int h) ee->prop.sticky = EINA_FALSE; /* init evas here */ - ee->evas = evas_new(); - evas_data_attach_set(ee->evas, ee); + if (!ecore_evas_evas_new(ee, w, h)) + { + ERR("Failed to create the canvas."); + ecore_evas_free(ee); + return NULL; + } evas_output_method_set(ee->evas, rmethod); - evas_output_size_set(ee->evas, w, h); - evas_output_viewport_set(ee->evas, 0, 0, w, h); evas_event_callback_add(ee->evas, EVAS_CALLBACK_RENDER_POST, _ecore_evas_ews_update_image, ee); einfo = (Evas_Engine_Info_Buffer *)evas_engine_info_get(ee->evas); diff --git a/src/modules/ecore_evas/engines/fb/ecore_evas_fb.c b/src/modules/ecore_evas/engines/fb/ecore_evas_fb.c index b2f485e64e..17bf83f7c1 100644 --- a/src/modules/ecore_evas/engines/fb/ecore_evas_fb.c +++ b/src/modules/ecore_evas/engines/fb/ecore_evas_fb.c @@ -616,23 +616,17 @@ ecore_evas_fb_new_internal(const char *disp_name, int rotation, int w, int h) ee->prop.fullscreen = EINA_FALSE; ee->prop.withdrawn = EINA_TRUE; ee->prop.sticky = EINA_FALSE; + ee->prop.window = 1; /* init evas here */ - ee->evas = evas_new(); - evas_data_attach_set(ee->evas, ee); + if (!ecore_evas_evas_new(ee, w, h)) + { + ERR("Could not create the canvas."); + ecore_evas_free(ee); + return NULL; + } evas_output_method_set(ee->evas, rmethod); - if (ECORE_EVAS_PORTRAIT(ee)) - { - evas_output_size_set(ee->evas, w, h); - evas_output_viewport_set(ee->evas, 0, 0, w, h); - } - else - { - evas_output_size_set(ee->evas, h, w); - evas_output_viewport_set(ee->evas, 0, 0, h, w); - } - einfo = (Evas_Engine_Info_FB *)evas_engine_info_get(ee->evas); if (einfo && disp_name) { @@ -654,15 +648,7 @@ ecore_evas_fb_new_internal(const char *disp_name, int rotation, int w, int h) return NULL; } - ecore_evas_input_event_register(ee); + ecore_evas_done(ee, EINA_TRUE); - _ecore_evas_register(ee); - ecore_event_window_register(1, ee, ee->evas, - (Ecore_Event_Mouse_Move_Cb)_ecore_evas_mouse_move_process, - (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process, - (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process, - (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process); - _ecore_event_window_direct_cb_set(1, _ecore_evas_input_direct_cb); - evas_event_feed_mouse_in(ee->evas, (unsigned int)((unsigned long long)(ecore_time_get() * 1000.0) & 0xffffffff), NULL); return ee; } diff --git a/src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c b/src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c index a6ddee93d2..8abc7401b6 100644 --- a/src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c +++ b/src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c @@ -510,12 +510,13 @@ _ecore_evas_internal_sdl_new(int rmethod, const char* name, int w, int h, int fu ee->prop.hwsurface = hwsurface; /* init evas here */ - ee->evas = evas_new(); - evas_data_attach_set(ee->evas, ee); - evas_output_method_set(ee->evas, rmethod); + if (!ecore_evas_evas_new(ee, w, h)) + { + ERR("Can not create Canvas."); + goto on_error; + } - evas_output_size_set(ee->evas, w, h); - evas_output_viewport_set(ee->evas, 0, 0, w, h); + evas_output_method_set(ee->evas, rmethod); gl = !(rmethod == evas_render_method_lookup("buffer")); ee->can_async_render = gl ? EINA_FALSE : EINA_TRUE; @@ -611,19 +612,13 @@ _ecore_evas_internal_sdl_new(int rmethod, const char* name, int w, int h, int fu } _ecore_evas_sdl_init(w, h); + ee->prop.window = SDL_GetWindowID(swd->w); + + ecore_evas_done(ee, EINA_FALSE); - ecore_event_window_register(SDL_GetWindowID(swd->w), ee, ee->evas, - (Ecore_Event_Mouse_Move_Cb)_ecore_evas_mouse_move_process, - (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process, - (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process, - (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process); - _ecore_event_window_direct_cb_set(SDL_GetWindowID(swd->w), _ecore_evas_input_direct_cb); SDL_SetWindowData(swd->w, "_Ecore_Evas", ee); - SDL_ShowCursor(SDL_ENABLE); - _ecore_evas_register(ee); - _ecore_evas_focus_device_set(ee, NULL, EINA_TRUE); ecore_evas_sdl_count++; return ee; diff --git a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c index adadf9fabc..b8f103b030 100644 --- a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c +++ b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c @@ -2529,11 +2529,13 @@ _ecore_evas_wl_common_new_internal(const char *disp_name, unsigned int parent, i ee->prop.aux_hint.supported_list = ecore_wl2_window_aux_hints_supported_get(wdata->win); ecore_evas_aux_hint_add(ee, "wm.policy.win.msg.use", "1"); - ee->evas = evas_new(); - evas_data_attach_set(ee->evas, ee); + if (!ecore_evas_evas_new(ee, ee->w + fw, ee->h + fh)) + { + ERR("Can not create Canvas."); + goto eng_err; + } + evas_output_method_set(ee->evas, method); - evas_output_size_set(ee->evas, ee->w + fw, ee->h + fh); - evas_output_viewport_set(ee->evas, 0, 0, ee->w + fw, ee->h + fh); evas_event_callback_add(ee->evas, EVAS_CALLBACK_RENDER_POST, _ecore_evas_wl_common_render_updates, ee); @@ -2573,16 +2575,7 @@ _ecore_evas_wl_common_new_internal(const char *disp_name, unsigned int parent, i _ecore_evas_wl_common_wm_rotation_protocol_set(ee); - _ecore_evas_register(ee); - ecore_evas_input_event_register(ee); - - ecore_event_window_register(ee->prop.window, ee, ee->evas, - (Ecore_Event_Mouse_Move_Cb)_ecore_evas_mouse_move_process, - (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process, - (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process, - (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process); - _ecore_event_window_direct_cb_set(ee->prop.window, - _ecore_evas_input_direct_cb); + ecore_evas_done(ee, EINA_FALSE); wdata->sync_handler = ecore_event_handler_add(ECORE_WL2_EVENT_SYNC_DONE, _ee_cb_sync_done, ee); diff --git a/src/modules/ecore_evas/engines/win32/ecore_evas_win32.c b/src/modules/ecore_evas/engines/win32/ecore_evas_win32.c index a9e2d7b03e..974ed1b721 100644 --- a/src/modules/ecore_evas/engines/win32/ecore_evas_win32.c +++ b/src/modules/ecore_evas/engines/win32/ecore_evas_win32.c @@ -1450,10 +1450,12 @@ _ecore_evas_win32_new_internal(int (*_ecore_evas_engine_backend_init)(Ecore_Evas ee->prop.withdrawn = EINA_TRUE; /* init evas here */ - ee->evas = evas_new(); - evas_data_attach_set(ee->evas, ee); - evas_output_size_set(ee->evas, width, height); - evas_output_viewport_set(ee->evas, 0, 0, width, height); + if (!ecore_evas_evas_new(ee, width, height)) + { + ERR("Can not create Canvas."); + free(ee); + return NULL; + } wdata->parent = parent; ee->prop.window = (Ecore_Window)ecore_win32_window_new(parent, x, y, width, height); @@ -1471,13 +1473,7 @@ _ecore_evas_win32_new_internal(int (*_ecore_evas_engine_backend_init)(Ecore_Evas return NULL; } - _ecore_evas_register(ee); - ecore_event_window_register(ee->prop.window, ee, ee->evas, - (Ecore_Event_Mouse_Move_Cb)_ecore_evas_mouse_move_process, - (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process, - (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process, - (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process); - _ecore_event_window_direct_cb_set(ee->prop.window, _ecore_evas_input_direct_cb); + ecore_evas_done(ee, EINA_FALSE); return ee; } diff --git a/src/modules/ecore_evas/engines/x/ecore_evas_x.c b/src/modules/ecore_evas/engines/x/ecore_evas_x.c index 88779a2a7c..dd0cecc302 100644 --- a/src/modules/ecore_evas/engines/x/ecore_evas_x.c +++ b/src/modules/ecore_evas/engines/x/ecore_evas_x.c @@ -4089,7 +4089,13 @@ ecore_evas_software_x11_new_internal(const char *disp_name, Ecore_X_Window paren ee->can_async_render = 1; /* init evas here */ - ee->evas = evas_new(); + if (!ecore_evas_evas_new(ee, w, h)) + { + ERR("Can not create a Canvas."); + ecore_evas_free(ee); + return NULL; + } + evas_event_callback_add(ee->evas, EVAS_CALLBACK_RENDER_FLUSH_PRE, _ecore_evas_x_flush_pre, ee); evas_event_callback_add(ee->evas, EVAS_CALLBACK_RENDER_FLUSH_POST, @@ -4097,10 +4103,7 @@ ecore_evas_software_x11_new_internal(const char *disp_name, Ecore_X_Window paren if (ee->can_async_render) evas_event_callback_add(ee->evas, EVAS_CALLBACK_RENDER_POST, _ecore_evas_x_render_updates, ee); - evas_data_attach_set(ee->evas, ee); evas_output_method_set(ee->evas, rmethod); - evas_output_size_set(ee->evas, w, h); - evas_output_viewport_set(ee->evas, 0, 0, w, h); edata->win_root = parent; edata->screen_num = 0; @@ -4216,14 +4219,9 @@ ecore_evas_software_x11_new_internal(const char *disp_name, Ecore_X_Window paren _ecore_evas_x_sync_set(ee); ee->engine.func->fn_render = _ecore_evas_x_render; - _ecore_evas_register(ee); + ecore_x_input_multi_select(ee->prop.window); - ecore_event_window_register(ee->prop.window, ee, ee->evas, - (Ecore_Event_Mouse_Move_Cb)_ecore_evas_mouse_move_process, - (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process, - (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process, - (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process); - _ecore_event_window_direct_cb_set(ee->prop.window, _ecore_evas_input_direct_cb); + ecore_evas_done(ee, EINA_FALSE); return ee; } @@ -4292,22 +4290,24 @@ ecore_evas_software_x11_pixmap_new_internal(const char *disp_name, Ecore_X_Windo ee->can_async_render = 1; /* init evas here */ - ee->evas = evas_new(); + if (!ecore_evas_evas_new(ee, w, h)) + { + ERR("Can not create Canvas."); + ecore_evas_free(ee); + return NULL; + } evas_event_callback_add(ee->evas, EVAS_CALLBACK_RENDER_FLUSH_PRE, _ecore_evas_x_flush_pre, ee); evas_event_callback_add(ee->evas, EVAS_CALLBACK_RENDER_FLUSH_POST, _ecore_evas_x_flush_post, ee); - evas_event_callback_add(ee->evas, EVAS_CALLBACK_RENDER_PRE, + evas_event_callback_add(ee->evas, EVAS_CALLBACK_RENDER_PRE, _ecore_evas_x_render_pre, ee); if (ee->can_async_render) evas_event_callback_add(ee->evas, EVAS_CALLBACK_RENDER_POST, _ecore_evas_x_render_updates, ee); - evas_data_attach_set(ee->evas, ee); evas_output_method_set(ee->evas, rmethod); - evas_output_size_set(ee->evas, w, h); - evas_output_viewport_set(ee->evas, 0, 0, w, h); edata->win_root = parent; edata->screen_num = 0; @@ -4611,13 +4611,15 @@ ecore_evas_gl_x11_options_new_internal(const char *disp_name, Ecore_X_Window par edata->state.sticky = 0; /* init evas here */ - ee->evas = evas_new(); + if (!ecore_evas_evas_new(ee, w, h)) + { + ERR("Can not create Canvas."); + ecore_evas_free(ee); + return NULL; + } evas_event_callback_add(ee->evas, EVAS_CALLBACK_RENDER_FLUSH_PRE, _ecore_evas_x_flush_pre, ee); evas_event_callback_add(ee->evas, EVAS_CALLBACK_RENDER_FLUSH_POST, _ecore_evas_x_flush_post, ee); - evas_data_attach_set(ee->evas, ee); evas_output_method_set(ee->evas, rmethod); - evas_output_size_set(ee->evas, w, h); - evas_output_viewport_set(ee->evas, 0, 0, w, h); if (parent == 0) parent = ecore_x_window_root_first_get(); edata->win_root = parent; @@ -4664,14 +4666,9 @@ ecore_evas_gl_x11_options_new_internal(const char *disp_name, Ecore_X_Window par _ecore_evas_x_sync_set(ee); ee->engine.func->fn_render = _ecore_evas_x_render; - _ecore_evas_register(ee); ecore_x_input_multi_select(ee->prop.window); - ecore_event_window_register(ee->prop.window, ee, ee->evas, - (Ecore_Event_Mouse_Move_Cb)_ecore_evas_mouse_move_process, - (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process, - (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process, - (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process); - _ecore_event_window_direct_cb_set(ee->prop.window, _ecore_evas_input_direct_cb); + + ecore_evas_done(ee, EINA_FALSE); return ee; } @@ -4752,17 +4749,19 @@ ecore_evas_gl_x11_pixmap_new_internal(const char *disp_name, Ecore_X_Window pare edata->state.sticky = 0; /* init evas here */ - ee->evas = evas_new(); - evas_event_callback_add(ee->evas, EVAS_CALLBACK_RENDER_FLUSH_PRE, + if (!ecore_evas_evas_new(ee, w, h)) + { + ERR("Can not create Canvas."); + ecore_evas_free(ee); + return NULL; + } + evas_event_callback_add(ee->evas, EVAS_CALLBACK_RENDER_FLUSH_PRE, _ecore_evas_x_flush_pre, ee); - evas_event_callback_add(ee->evas, EVAS_CALLBACK_RENDER_FLUSH_POST, + evas_event_callback_add(ee->evas, EVAS_CALLBACK_RENDER_FLUSH_POST, _ecore_evas_x_flush_post, ee); - evas_event_callback_add(ee->evas, EVAS_CALLBACK_RENDER_PRE, + evas_event_callback_add(ee->evas, EVAS_CALLBACK_RENDER_PRE, _ecore_evas_x_render_pre, ee); - evas_data_attach_set(ee->evas, ee); evas_output_method_set(ee->evas, rmethod); - evas_output_size_set(ee->evas, w, h); - evas_output_viewport_set(ee->evas, 0, 0, w, h); if (ee->can_async_render) evas_event_callback_add(ee->evas, EVAS_CALLBACK_RENDER_POST,