jypark pushed a commit to branch master.

commit f488cf2b4d42b8b4e3acf8c22647ffdd9a3e9d2c
Author: Jiyoun Park <[email protected]>
Date:   Thu Jun 13 14:09:28 2013 +0900

    Evas: Fix bs if app call image object update add after call api like
    fileset.
---
 ChangeLog                               |  4 ++++
 NEWS                                    |  1 +
 src/lib/evas/canvas/evas_object_image.c | 10 +++++++++-
 3 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/ChangeLog b/ChangeLog
index e2a081a..446c491 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2013-06-13  Jiyou Park
+
+        * Evas: Fix crash if app call image object update add after calling 
api like fileset.
+
 2013-06-11  Carsten Haitzler (The Rasterman)
 
         * Support qualcomm begin/end tile extension for partial update
diff --git a/NEWS b/NEWS
index 2de8052..e8540cd 100644
--- a/NEWS
+++ b/NEWS
@@ -330,4 +330,5 @@ Fixes:
     * Evas: correctly detect if a loader support asynchronous preloading.
     * Evas: improve stability of Evas_Cserve2.
     * Evas: Fix gif cannot decode alpha value correctly.
+    * Evas: Fix bs if app call image object update add after call api like 
fileset.
 
diff --git a/src/lib/evas/canvas/evas_object_image.c 
b/src/lib/evas/canvas/evas_object_image.c
index 4950550..b3bddb6 100644
--- a/src/lib/evas/canvas/evas_object_image.c
+++ b/src/lib/evas/canvas/evas_object_image.c
@@ -124,6 +124,7 @@ struct _Evas_Object_Image
    Eina_Bool         created : 1;
    Eina_Bool         proxyerror : 1;
    Eina_Bool         proxy_src_clip : 1;
+   Eina_Bool         written : 1;
 };
 
 /* private methods for image objects */
@@ -585,7 +586,7 @@ _image_done_set(Eo *eo_obj, Evas_Object_Protected_Data 
*obj, Evas_Object_Image *
           }
         EINA_COW_IMAGE_STATE_WRITE_END(o, state_write);
      }
-
+   o->written = EINA_FALSE;
    o->changed = EINA_TRUE;
    if (resize_call) evas_object_inform_call_image_resize(eo_obj);
    evas_object_change(eo_obj, obj);
@@ -1377,6 +1378,7 @@ _image_size_set(Eo *eo_obj, void *_pd, va_list *list)
      }
    EINA_COW_IMAGE_STATE_WRITE_END(o, cur_write);
 
+   o->written = EINA_TRUE;
    o->changed = EINA_TRUE;
    evas_object_inform_call_image_resize(eo_obj);
    evas_object_change(eo_obj, obj);
@@ -1551,6 +1553,7 @@ _image_data_set(Eo *eo_obj, void *_pd, va_list *list)
                   EINA_COW_IMAGE_STATE_WRITE_END(o, state_write);
                }
          }
+       o->written = EINA_TRUE;
      }
    else
      {
@@ -1655,6 +1658,7 @@ _image_data_get(Eo *eo_obj, void *_pd, va_list *list)
    o->pixels_checked_out++;
    if (for_writing)
      {
+        o->written = EINA_TRUE;
         EVAS_OBJECT_WRITE_IMAGE_FREE_FILE_AND_KEY(o);
      }
 
@@ -1780,6 +1784,7 @@ _image_data_copy_set(Eo *eo_obj, void *_pd, va_list *list)
                state_write->image.stride = stride;
              EINA_COW_IMAGE_STATE_WRITE_END(o, state_write);
           }
+        o->written = EINA_TRUE;
      }
    o->pixels_checked_out = 0;
    EVAS_OBJECT_WRITE_IMAGE_FREE_FILE_AND_KEY(o);
@@ -1807,6 +1812,7 @@ _image_data_update_add(Eo *eo_obj, void *_pd, va_list 
*list)
    int h = va_arg(*list, int);
    RECTS_CLIP_TO_RECT(x, y, w, h, 0, 0, o->cur->image.w, o->cur->image.h);
    if ((w <= 0)  || (h <= 0)) return;
+   if (!o->written) return;
    cnt = eina_list_count(o->pixels->pixel_updates);
    if (cnt == 1)
      { // detect single blob case already there to do a nop
@@ -1899,6 +1905,7 @@ _image_alpha_set(Eo *eo_obj, void *_pd, va_list *list)
                state_write->image.stride = stride;
              EINA_COW_IMAGE_STATE_WRITE_END(o, state_write);
           }
+        o->written = EINA_TRUE;
      }
    evas_object_image_data_update_add(eo_obj, 0, 0, o->cur->image.w, 
o->cur->image.h);
    EVAS_OBJECT_WRITE_IMAGE_FREE_FILE_AND_KEY(o);
@@ -1997,6 +2004,7 @@ _image_reload(Eo *eo_obj, void *_pd, va_list *list 
EINA_UNUSED)
        (o->pixels_checked_out > 0)) return;
    if (o->engine_data)
      o->engine_data = 
obj->layer->evas->engine.func->image_dirty_region(obj->layer->evas->engine.data.output,
 o->engine_data, 0, 0, o->cur->image.w, o->cur->image.h);
+   o->written = EINA_FALSE;
    evas_object_image_unload(eo_obj, 1);
    evas_object_inform_call_image_unloaded(eo_obj);
    evas_object_image_load(eo_obj);

-- 

------------------------------------------------------------------------------
This SF.net email is sponsored by Windows:

Build for Windows Store.

http://p.sf.net/sfu/windows-dev2dev

Reply via email to