cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=a44697c37a304c0d4d574b6772775c6936869e24

commit a44697c37a304c0d4d574b6772775c6936869e24
Author: Cedric Bail <[email protected]>
Date:   Mon Apr 2 14:55:57 2018 -0700

    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 +
 .../ecore_evas/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 ++--
 src/modules/ecore_evas/engines/fb/ecore_evas_fb.c  | 28 +++------
 .../ecore_evas/engines/sdl/ecore_evas_sdl.c        | 23 +++-----
 .../engines/wayland/ecore_evas_wayland_common.c    | 21 +++----
 .../ecore_evas/engines/win32/ecore_evas_win32.c    | 18 +++---
 src/modules/ecore_evas/engines/x/ecore_evas_x.c    | 67 +++++++++++-----------
 10 files changed, 124 insertions(+), 129 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,22 +616,16 @@ 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);
-   evas_output_method_set(ee->evas, rmethod);
-
-   if (ECORE_EVAS_PORTRAIT(ee))
+   if (!ecore_evas_evas_new(ee, w, h))
      {
-       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);
+        ERR("Could not create the canvas.");
+        ecore_evas_free(ee);
+        return NULL;
      }
+   evas_output_method_set(ee->evas, rmethod);
 
    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_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);
+   ecore_evas_done(ee, EINA_FALSE);
 
+   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,

-- 


Reply via email to