diff --git a/src/lib/evas/canvas/efl_canvas_vg_object.c b/src/lib/evas/canvas/efl_canvas_vg_object.c index c06b03ff6b..762de026dc 100644 --- a/src/lib/evas/canvas/efl_canvas_vg_object.c +++ b/src/lib/evas/canvas/efl_canvas_vg_object.c @@ -244,6 +244,37 @@ _efl_canvas_vg_object_viewbox_align_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Vg if (align_y) *align_y = pd->align_y; } +EOLIAN static Eina_Error +_efl_canvas_vg_object_efl_file_file_set(Eo *eo_obj, Efl_Canvas_Vg_Object_Data *pd EINA_UNUSED, const char *file) +{ + /* Careful: delete previous vg entry. + When a new efl file is set, ex-file will be invalid. + Since vg cache hashes all file entries, + we must remove it from vg cache before we lost file handle. */ + if (efl_file_loaded_get(eo_obj)) + { + const char *pname = efl_file_get(eo_obj); + int pl = pname ? strlen(pname) : 0; + int cl = file ? strlen(file) : 0; + + if ((pl != cl) || strcmp(pname, file)) + { + Evas_Object_Protected_Data *obj; + obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS); + evas_cache_vg_entry_del(pd->vg_entry); + evas_object_change(eo_obj, obj); + pd->vg_entry = NULL; + evas_object_change(eo_obj, obj); + } + } + + Eina_Error err; + err = efl_file_set(efl_super(eo_obj, MY_CLASS), file); + if (err) return err; + + return 0; +} + EOLIAN static Eina_Error _efl_canvas_vg_object_efl_file_load(Eo *eo_obj, Efl_Canvas_Vg_Object_Data *pd) { @@ -255,16 +286,13 @@ _efl_canvas_vg_object_efl_file_load(Eo *eo_obj, Efl_Canvas_Vg_Object_Data *pd) const Eina_File *file = efl_file_mmap_get(eo_obj); const char *key = efl_file_key_get(eo_obj); - Vg_Cache_Entry *old_entry; Evas_Object_Protected_Data *obj; obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS); - old_entry = pd->vg_entry; pd->vg_entry = evas_cache_vg_entry_create(file, key, obj->cur->geometry.w, obj->cur->geometry.h); evas_object_change(eo_obj, obj); - evas_cache_vg_entry_del(old_entry); return 0; } diff --git a/src/lib/evas/canvas/efl_canvas_vg_object.eo b/src/lib/evas/canvas/efl_canvas_vg_object.eo index abcbc95f7c..ca7134fec1 100644 --- a/src/lib/evas/canvas/efl_canvas_vg_object.eo +++ b/src/lib/evas/canvas/efl_canvas_vg_object.eo @@ -84,6 +84,7 @@ class @beta Efl.Canvas.Vg.Object extends Efl.Canvas.Object implements Efl.File, Efl.Object.destructor; Efl.File.load; Efl.File.unload; + Efl.File.file { set; } Efl.File_Save.save; Efl.Gfx.Frame_Controller.animated { get; } Efl.Gfx.Frame_Controller.frame { get; set; }