jpeg pushed a commit to branch master.

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

commit 84cb06784e6491277f3303276b1339c0207fca64
Author: Wonsik Jung <sid...@samsung.com>
Date:   Wed Nov 11 13:22:25 2015 +0900

    Evas sw_generic/x11: Fix calls to native_bind_cb/unbind_cb
    
    Summary:
    In Evas-SW-Generic/X11, native_unbind_cb is not called sometimes, although
    native_bind_cb was called.
    Some native surface's cases, both native_bind_cb and native_unbind_cb should
    be called for mapping and unmapping, eg. with tbm_surface.
    
    @fix
    
    Test Plan:
    Evas Native Surface with pixmap sample.
    Evas Native Surface with tbm(this sample can work in Tize Device)
    elementary_test
    
    Reviewers: raster, jpeg, cedric, spacegrapher
    
    Subscribers: JoogabYun, scholb.kim, dkdk
    
    Differential Revision: https://phab.enlightenment.org/D3317
---
 src/modules/evas/engines/software_generic/evas_engine.c | 13 +++++++++++--
 src/modules/evas/engines/software_x11/evas_engine.c     |  2 ++
 src/modules/evas/engines/software_x11/evas_xcb_image.c  |  2 ++
 src/modules/evas/engines/software_x11/evas_xlib_image.c |  1 +
 4 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/src/modules/evas/engines/software_generic/evas_engine.c 
b/src/modules/evas/engines/software_generic/evas_engine.c
index 9570a51..ecd96f18 100644
--- a/src/modules/evas/engines/software_generic/evas_engine.c
+++ b/src/modules/evas/engines/software_generic/evas_engine.c
@@ -1956,6 +1956,7 @@ eng_image_draw(void *data EINA_UNUSED, void *context, 
void *surface, void *image
 
    if (do_async)
      {
+        Eina_Bool ret;
         if (!evas_common_rgba_image_scalecache_prepare(image, surface, 
context, smooth,
                                                        src_x, src_y, src_w, 
src_h,
                                                        dst_x, dst_y, dst_w, 
dst_h))
@@ -1968,15 +1969,23 @@ eng_image_draw(void *data EINA_UNUSED, void *context, 
void *surface, void *image
                   else
 #endif
                     evas_cache_image_load_data(&im->cache_entry);
-                  if (!im->cache_entry.flags.loaded) return EINA_FALSE;
+                  if (!im->cache_entry.flags.loaded)
+                    {
+                       if (im->native.func.unbind)
+                         im->native.func.unbind(data, image);
+                       return EINA_FALSE;
+                    }
                }
           }
-        return evas_common_rgba_image_scalecache_do_cbs(image, surface,
+        ret = evas_common_rgba_image_scalecache_do_cbs(image, surface,
                                                         context, smooth,
                                                         src_x, src_y, src_w, 
src_h,
                                                         dst_x, dst_y, dst_w, 
dst_h,
                                                         _image_thr_cb_sample,
                                                         _image_thr_cb_smooth);
+        if (im->native.func.unbind)
+           im->native.func.unbind(data, image);
+        return ret;
      }
 #ifdef BUILD_PIPE_RENDER
    else if ((cpunum > 1))
diff --git a/src/modules/evas/engines/software_x11/evas_engine.c 
b/src/modules/evas/engines/software_x11/evas_engine.c
index e97f0f5..72ee1e7 100644
--- a/src/modules/evas/engines/software_x11/evas_engine.c
+++ b/src/modules/evas/engines/software_x11/evas_engine.c
@@ -641,6 +641,7 @@ _native_evasgl_free(void *data EINA_UNUSED, void *image)
    im->native.data        = NULL;
    im->native.func.data   = NULL;
    im->native.func.bind   = NULL;
+   im->native.func.unbind = NULL;
    im->native.func.free   = NULL;
    //im->image.data         = NULL;
    free(n);
@@ -740,6 +741,7 @@ eng_image_native_set(void *data EINA_UNUSED, void *image, 
void *native)
              im->native.func.free = _native_evasgl_free;
              im->native.func.data = NULL;
              im->native.func.bind = NULL;
+             im->native.func.unbind = NULL;
           }
      }
 
diff --git a/src/modules/evas/engines/software_x11/evas_xcb_image.c 
b/src/modules/evas/engines/software_x11/evas_xcb_image.c
index d15dbe3..597a8c6 100644
--- a/src/modules/evas/engines/software_x11/evas_xcb_image.c
+++ b/src/modules/evas/engines/software_x11/evas_xcb_image.c
@@ -68,6 +68,7 @@ _native_cb_free(void *data EINA_UNUSED, void *image)
    im->native.data = NULL;
    im->native.func.data = NULL;
    im->native.func.bind = NULL;
+   im->native.func.unbind = NULL;
    im->native.func.free = NULL;
    im->image.data = NULL;
 
@@ -116,6 +117,7 @@ evas_xcb_image_native_set(void *data, void *image, void 
*native)
         im->native.data = n;
         im->native.func.data = NULL;
         im->native.func.bind = _native_cb_bind;
+        im->native.func.unbind = NULL;
         im->native.func.free = _native_cb_free;
 
         _evas_xcb_image_update(data, image, 0, 0, w, h);
diff --git a/src/modules/evas/engines/software_x11/evas_xlib_image.c 
b/src/modules/evas/engines/software_x11/evas_xlib_image.c
index 615d11a..9472977 100644
--- a/src/modules/evas/engines/software_x11/evas_xlib_image.c
+++ b/src/modules/evas/engines/software_x11/evas_xlib_image.c
@@ -60,6 +60,7 @@ _native_free_cb(void *data EINA_UNUSED, void *image)
    im->native.data        = NULL;
    im->native.func.data   = NULL;
    im->native.func.bind   = NULL;
+   im->native.func.unbind = NULL;
    im->native.func.free   = NULL;
    im->image.data         = NULL;
    free(n);

-- 


Reply via email to