diff --git a/src/lib/evas/cache/evas_cache_image.c b/src/lib/evas/cache/evas_cache_image.c index b76d58944b..275a59a1d1 100644 --- a/src/lib/evas/cache/evas_cache_image.c +++ b/src/lib/evas/cache/evas_cache_image.c @@ -386,6 +386,8 @@ _evas_cache_image_preloaded_notify(Image_Entry *ie) ie->targets = (Evas_Cache_Target *) eina_inlist_remove(EINA_INLIST_GET(ie->targets), EINA_INLIST_GET(ie->targets)); + if (ie->load_opts.skip_head && !tmp->delete_me && !tmp->preload_cancel) + _evas_image_preload_update((void*)tmp->target, ie->f); if (!tmp->delete_me && tmp->preloaded_cb) tmp->preloaded_cb(tmp->preloaded_data); if (!tmp->preload_cancel) diff --git a/src/lib/evas/canvas/efl_canvas_image.c b/src/lib/evas/canvas/efl_canvas_image.c index 679fbdca05..4021f32fc1 100644 --- a/src/lib/evas/canvas/efl_canvas_image.c +++ b/src/lib/evas/canvas/efl_canvas_image.c @@ -19,6 +19,19 @@ _evas_image_file_unload(Eo *eo_obj) _evas_image_done_set(eo_obj, obj, o); o->load_error = EFL_GFX_IMAGE_LOAD_ERROR_NONE; } + +void +_evas_image_preload_update(Eo *eo_obj, Eina_File *f) +{ + Evas_Image_Data *o = efl_data_scope_get(eo_obj, EFL_CANVAS_IMAGE_INTERNAL_CLASS); + if (o->cur->f) return; + EINA_COW_IMAGE_STATE_WRITE_BEGIN(o, cur) + { + cur->f = eina_file_dup(f); + } + EINA_COW_IMAGE_STATE_WRITE_END(o, cur) +} + Eina_Bool _evas_image_file_load(Eo *eo_obj, Evas_Image_Data *o) { diff --git a/src/lib/evas/include/evas_private.h b/src/lib/evas/include/evas_private.h index 01bac6f607..f0f209d3e3 100644 --- a/src/lib/evas/include/evas_private.h +++ b/src/lib/evas/include/evas_private.h @@ -1891,7 +1891,7 @@ EAPI const char *_evas_module_libdir_get(void); const char *_evas_module_datadir_get(void); EAPI Eina_List *_evas_canvas_image_data_unset(Evas *eo_e); EAPI void _evas_canvas_image_data_regenerate(Eina_List *list); - +void _evas_image_preload_update(Eo *eo_obj, Eina_File *f); Eina_Bool evas_render_mapped(Evas_Public_Data *e, Evas_Object *obj, Evas_Object_Protected_Data *source_pd, void *context, void *output, void *surface,