Enlightenment CVS committal Author : raster Project : e17 Module : libs/edje
Dir : e17/libs/edje/src/lib Modified Files: edje_cache.c edje_data.c edje_load.c edje_private.h edje_textblock_styles.c Log Message: cedric's eet and edje patches to use eet dictionaries for strings. =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_cache.c,v retrieving revision 1.14 retrieving revision 1.15 diff -u -3 -r1.14 -r1.15 --- edje_cache.c 8 Sep 2007 18:31:56 -0000 1.14 +++ edje_cache.c 1 Mar 2008 06:38:09 -0000 1.15 @@ -12,11 +12,11 @@ static int _edje_collection_cache_size = 16; static Edje_Part_Collection * -_edje_file_coll_open(Edje_File *edf, Eet_File *ef, const char *coll) +_edje_file_coll_open(Edje_File *edf, const char *coll) { Edje_Part_Collection *edc = NULL; Evas_List *l = NULL; - int id = -1, close_eet = 0, size = 0; + int id = -1, size = 0; char buf[256]; void *data; @@ -33,23 +33,12 @@ } if (id < 0) return NULL; - if (!ef) - { - ef = eet_open(edf->path, EET_FILE_MODE_READ); - if (!ef) return NULL; - close_eet = 1; - } snprintf(buf, sizeof(buf), "collections/%i", id); - edc = eet_data_read(ef, _edje_edd_edje_part_collection, buf); - if (!edc) - { - if (close_eet) eet_close(ef); - return NULL; - } + edc = eet_data_read(edf->ef, _edje_edd_edje_part_collection, buf); + if (!edc) return NULL; snprintf(buf, sizeof(buf), "scripts/%i", id); - data = eet_read(ef, buf, &size); - if (close_eet) eet_close(ef); + data = eet_read(edf->ef, buf, &size); if (data) { @@ -83,7 +72,8 @@ snprintf(tmp, length, "fonts/%s", fnt->entry); fnt->path = evas_stringshare_add(tmp); - evas_stringshare_del(fnt->entry); + if (edf->free_strings) + evas_stringshare_del(fnt->entry); fnt->entry = fnt->path + 6; edf->font_hash = evas_hash_direct_add(edf->font_hash, fnt->entry, fnt); @@ -121,18 +111,21 @@ eet_close(ef); return NULL; } + + edf->free_strings = eet_dictionary_get(ef) ? 0 : 1; + + edf->ef = ef; + if (edf->version != EDJE_FILE_VERSION) { *error_ret = EDJE_LOAD_ERROR_INCOMPATIBLE_FILE; _edje_file_free(edf); - eet_close(ef); return NULL; } if (!edf->collection_dir) { *error_ret = EDJE_LOAD_ERROR_CORRUPT_FILE; _edje_file_free(edf); - eet_close(ef); return NULL; } @@ -151,7 +144,7 @@ if (coll) { - edc = _edje_file_coll_open(edf, ef, coll); + edc = _edje_file_coll_open(edf, coll); if (!edc) { *error_ret = EDJE_LOAD_ERROR_UNKNOWN_COLLECTION; @@ -163,8 +156,6 @@ _edje_font_hash(edf); - eet_close(ef); - return edf; } @@ -227,7 +218,7 @@ } if (!edc) { - edc = _edje_file_coll_open(edf, NULL, coll); + edc = _edje_file_coll_open(edf, coll); if (!edc) { *error_ret = EDJE_LOAD_ERROR_UNKNOWN_COLLECTION; =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_data.c,v retrieving revision 1.40 retrieving revision 1.41 diff -u -3 -r1.40 -r1.41 --- edje_data.c 8 Sep 2007 18:25:43 -0000 1.40 +++ edje_data.c 1 Mar 2008 06:38:09 -0000 1.41 @@ -59,6 +59,19 @@ FREED(_edje_edd_edje_part_image_id); } +static char * +_edge_str_direct_alloc(const char *str) +{ + + return (char *) str; +} + +static void +_edje_str_direct_free(const char *str) +{ + (void) str; +} + void _edje_edd_setup(void) { @@ -76,25 +89,27 @@ eddc.func.hash_foreach = evas_hash_foreach; eddc.func.hash_add = evas_hash_add; eddc.func.hash_free = evas_hash_free; + eddc.func.str_direct_alloc = _edge_str_direct_alloc; + eddc.func.str_direct_free = _edje_str_direct_free; /* font directory */ NEWD("Edje_Font_Directory_Entry", Edje_Font_Directory_Entry); _edje_edd_edje_font_directory_entry = - eet_data_descriptor2_new(&eddc); + eet_data_descriptor3_new(&eddc); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_font_directory_entry, Edje_Font_Directory_Entry, "entry", entry, EET_T_STRING); NEWD("Edje_Font_Directory", Edje_Font_Directory); _edje_edd_edje_font_directory = - eet_data_descriptor2_new(&eddc); + eet_data_descriptor3_new(&eddc); EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_font_directory, Edje_Font_Directory, "entries", entries, _edje_edd_edje_font_directory_entry); /* image directory */ NEWD("Edje_Image_Directory_Entry", Edje_Image_Directory_Entry); _edje_edd_edje_image_directory_entry = - eet_data_descriptor2_new(&eddc); + eet_data_descriptor3_new(&eddc); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_image_directory_entry, Edje_Image_Directory_Entry, "entry", entry, EET_T_STRING); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_image_directory_entry, Edje_Image_Directory_Entry, "source_type", source_type, EET_T_INT); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_image_directory_entry, Edje_Image_Directory_Entry, "source_param", source_param, EET_T_INT); @@ -103,14 +118,14 @@ NEWD("Edje_Image_Directory", Edje_Image_Directory); _edje_edd_edje_image_directory = - eet_data_descriptor2_new(&eddc); + eet_data_descriptor3_new(&eddc); EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_image_directory, Edje_Image_Directory, "entries", entries, _edje_edd_edje_image_directory_entry); /* spectrum directory */ NEWD("Edje_Spectrum_Color", Edje_Spectrum_Color); _edje_edd_edje_spectrum_color = - eet_data_descriptor2_new(&eddc); + eet_data_descriptor3_new(&eddc); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_spectrum_color, Edje_Spectrum_Color, "r", r, EET_T_INT); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_spectrum_color, Edje_Spectrum_Color, "g", g, EET_T_INT); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_spectrum_color, Edje_Spectrum_Color, "b", b, EET_T_INT); @@ -120,7 +135,7 @@ NEWD("Edje_Spectrum_Directory_Entry", Edje_Spectrum_Directory_Entry); _edje_edd_edje_spectrum_directory_entry = - eet_data_descriptor2_new(&eddc); + eet_data_descriptor3_new(&eddc); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_spectrum_directory_entry, Edje_Spectrum_Directory_Entry, "entry", entry, EET_T_STRING); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_spectrum_directory_entry, Edje_Spectrum_Directory_Entry, "filename", filename, EET_T_STRING); EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_spectrum_directory_entry, Edje_Spectrum_Directory_Entry, "color_list", color_list, _edje_edd_edje_spectrum_color); @@ -129,49 +144,49 @@ NEWD("Edje_Spectrum_Directory", Edje_Spectrum_Directory); _edje_edd_edje_spectrum_directory = - eet_data_descriptor2_new(&eddc); + eet_data_descriptor3_new(&eddc); EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_spectrum_directory, Edje_Spectrum_Directory, "entries", entries, _edje_edd_edje_spectrum_directory_entry); /* collection directory */ NEWD("Edje_Part_Collection_Directory_Entry", Edje_Part_Collection_Directory_Entry); _edje_edd_edje_part_collection_directory_entry = - eet_data_descriptor2_new(&eddc); + eet_data_descriptor3_new(&eddc); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection_directory_entry, Edje_Part_Collection_Directory_Entry, "entry", entry, EET_T_STRING); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection_directory_entry, Edje_Part_Collection_Directory_Entry, "id", id, EET_T_INT); NEWD("Edje_Part_Collection_Directory", Edje_Part_Collection_Directory); _edje_edd_edje_part_collection_directory = - eet_data_descriptor2_new(&eddc); + eet_data_descriptor3_new(&eddc); EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_part_collection_directory, Edje_Part_Collection_Directory, "entries", entries, _edje_edd_edje_part_collection_directory_entry); /* generic data attachment */ NEWD("Edje_Data", Edje_Data); _edje_edd_edje_data = - eet_data_descriptor2_new(&eddc); + eet_data_descriptor3_new(&eddc); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_data, Edje_Data, "key", key, EET_T_STRING); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_data, Edje_Data, "value", value, EET_T_STRING); NEWD("Edje_Style_Tag", Edje_Style_Tag); _edje_edd_edje_style_tag = - eet_data_descriptor2_new(&eddc); + eet_data_descriptor3_new(&eddc); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_style_tag, Edje_Style_Tag, "key", key, EET_T_STRING); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_style_tag, Edje_Style_Tag, "value", value, EET_T_STRING); NEWD("Edje_Style", Edje_Style); _edje_edd_edje_style = - eet_data_descriptor2_new(&eddc); + eet_data_descriptor3_new(&eddc); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_style, Edje_Style, "name", name, EET_T_STRING); EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_style, Edje_Style, "tags", tags, _edje_edd_edje_style_tag); NEWD("Edje_Color_Class", Edje_Color_Class); _edje_edd_edje_color_class = - eet_data_descriptor2_new(&eddc); + eet_data_descriptor3_new(&eddc); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_color_class, Edje_Color_Class, "name", name, EET_T_STRING); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_color_class, Edje_Color_Class, "r", r, EET_T_UCHAR); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_color_class, Edje_Color_Class, "g", g, EET_T_UCHAR); @@ -190,7 +205,7 @@ NEWD("Edje_File", Edje_File); _edje_edd_edje_file = - eet_data_descriptor2_new(&eddc); + eet_data_descriptor3_new(&eddc); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_file, Edje_File, "compiler", compiler, EET_T_STRING); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_file, Edje_File, "version", version, EET_T_INT); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_file, Edje_File, "feature_ver", feature_ver, EET_T_INT); @@ -206,20 +221,20 @@ NEWD("Edje_Program_Target", Edje_Program_Target); _edje_edd_edje_program_target = - eet_data_descriptor2_new(&eddc); + eet_data_descriptor3_new(&eddc); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program_target, Edje_Program_Target, "id", id, EET_T_INT); NEWD("Edje_Program_After", Edje_Program_After); _edje_edd_edje_program_after = - eet_data_descriptor2_new(&eddc); + eet_data_descriptor3_new(&eddc); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program_after, Edje_Program_After, "id", id, EET_T_INT); NEWD("Edje_Program", Edje_Program); _edje_edd_edje_program = - eet_data_descriptor2_new(&eddc); + eet_data_descriptor3_new(&eddc); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "id", id, EET_T_INT); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "name", name, EET_T_STRING); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "signal", signal, EET_T_STRING); @@ -239,13 +254,13 @@ NEWD("Edje_Part_Image_Id", Edje_Part_Image_Id); _edje_edd_edje_part_image_id = - eet_data_descriptor2_new(&eddc); + eet_data_descriptor3_new(&eddc); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_image_id, Edje_Part_Image_Id, "id", id, EET_T_INT); NEWD("Edje_Part_Description", Edje_Part_Description); _edje_edd_edje_part_description = - eet_data_descriptor2_new(&eddc); + eet_data_descriptor3_new(&eddc); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "state.name", state.name, EET_T_STRING); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "state.value", state.value, EET_T_DOUBLE); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "visible", visible, EET_T_CHAR); @@ -338,7 +353,7 @@ NEWD("Edje_Part", Edje_Part); _edje_edd_edje_part = - eet_data_descriptor2_new(&eddc); + eet_data_descriptor3_new(&eddc); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "name", name, EET_T_STRING); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "id", id, EET_T_INT); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "type", type, EET_T_CHAR); @@ -364,7 +379,7 @@ NEWD("Edje_Part_Collection", Edje_Part_Collection); _edje_edd_edje_part_collection = - eet_data_descriptor2_new(&eddc); + eet_data_descriptor3_new(&eddc); EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_part_collection, Edje_Part_Collection, "programs", programs, _edje_edd_edje_program); EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_part_collection, Edje_Part_Collection, "parts", parts, _edje_edd_edje_part); EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_part_collection, Edje_Part_Collection, "data", data, _edje_edd_edje_data); =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_load.c,v retrieving revision 1.116 retrieving revision 1.117 diff -u -3 -r1.116 -r1.117 --- edje_load.c 26 Feb 2008 20:12:00 -0000 1.116 +++ edje_load.c 1 Mar 2008 06:38:09 -0000 1.117 @@ -5,7 +5,7 @@ #include "Edje.h" #include "edje_private.h" -static void _edje_collection_free_part_description_free(Edje_Part_Description *desc); +static void _edje_collection_free_part_description_free(Edje_Part_Description *desc, unsigned int free_strings); static Evas_Bool _edje_file_collection_hash_foreach(const Evas_Hash *hash, const char *key, void *data, void *fdata); #ifdef EDJE_PROGRAM_CACHE static int _edje_collection_free_prog_cache_matches_free_cb(Evas_Hash *hash, const char *key, void *data, void *fdata); @@ -430,6 +430,8 @@ _edje_programs_patterns_init(ed); n = evas_list_count(ed->collection->programs); + ed->patterns.programs.signals_patterns = edje_match_programs_signal_init(ed->collection->programs); + ed->patterns.programs.sources_patterns = edje_match_programs_source_init(ed->collection->programs); if (n > 0) { /* FIXME: keeping a table AND a list is just bad - nuke list */ @@ -683,7 +685,7 @@ if (rp->text.cache.out_str) evas_stringshare_del(rp->text.cache.out_str); if (rp->custom.description) - _edje_collection_free_part_description_free(rp->custom.description); + _edje_collection_free_part_description_free(rp->custom.description, ed->file->free_strings); _edje_unref(rp->edje); free(rp); @@ -725,10 +727,12 @@ * Used to free the cached data values that are stored in the data_cache * hash table. */ -static Evas_Bool -data_cache_free(const Evas_Hash *hash, const char *key, void *data, void *fdata) +static Evas_Bool data_cache_free(const Evas_Hash *hash, const char *key, void *data, void *fdata) { - evas_stringshare_del(data); + Edje_File *edf; + + edf = fdata; + if (edf->free_strings) evas_stringshare_del(data); return 1; } @@ -744,8 +748,8 @@ fe = edf->font_dir->entries->data; edf->font_dir->entries = evas_list_remove_list(edf->font_dir->entries, edf->font_dir->entries); - edf->font_hash = evas_hash_del(edf->font_hash, fe->entry, NULL); - if (fe->path) evas_stringshare_del(fe->path); + edf->font_hash = evas_hash_del(edf->font_hash, fe->entry, edf); + if (edf->free_strings && fe->path) evas_stringshare_del(fe->path); free(fe); } free(edf->font_dir); @@ -759,7 +763,7 @@ ie = edf->image_dir->entries->data; edf->image_dir->entries = evas_list_remove_list(edf->image_dir->entries, edf->image_dir->entries); - if (ie->entry) evas_stringshare_del(ie->entry); + if (edf->free_strings && ie->entry) evas_stringshare_del(ie->entry); free(ie); } free(edf->image_dir); @@ -773,7 +777,7 @@ ce = edf->collection_dir->entries->data; edf->collection_dir->entries = evas_list_remove_list(edf->collection_dir->entries, edf->collection_dir->entries); - if (ce->entry) evas_stringshare_del(ce->entry); + if (edf->free_strings && ce->entry) evas_stringshare_del(ce->entry); free(ce); } free(edf->collection_dir); @@ -793,8 +797,11 @@ se->color_list = evas_list_remove_list(se->color_list, se->color_list); } - if (se->entry) evas_stringshare_del(se->entry); - if (se->filename) evas_stringshare_del(se->filename); + if (edf->free_strings) + { + if (se->entry) evas_stringshare_del(se->entry); + if (se->filename) evas_stringshare_del(se->filename); + } free(se); } free(edf->spectrum_dir); @@ -805,13 +812,16 @@ edt = edf->data->data; edf->data = evas_list_remove(edf->data, edt); - if (edt->key) evas_stringshare_del(edt->key); - if (edt->value) evas_stringshare_del(edt->value); + if (edf->free_strings) + { + if (edt->key) evas_stringshare_del(edt->key); + if (edt->value) evas_stringshare_del(edt->value); + } free(edt); } if (edf->data_cache) { - evas_hash_foreach(edf->data_cache, data_cache_free, NULL); + evas_hash_foreach(edf->data_cache, data_cache_free, edf); evas_hash_free(edf->data_cache); edf->data_cache = NULL; } @@ -823,7 +833,7 @@ ecc = edf->color_classes->data; edf->color_classes = evas_list_remove_list(edf->color_classes, edf->color_classes); - if (ecc->name) evas_stringshare_del(ecc->name); + if (edf->free_strings && ecc->name) evas_stringshare_del(ecc->name); free(ecc); } @@ -845,9 +855,10 @@ evas_hash_free(edf->collection_hash); } if (edf->path) evas_stringshare_del(edf->path); - if (edf->compiler) evas_stringshare_del(edf->compiler); + if (edf->free_strings && edf->compiler) evas_stringshare_del(edf->compiler); if (edf->collection_cache) _edje_cache_coll_flush(edf); _edje_textblock_style_cleanup(edf); + if (edf->ef) eet_close(edf->ef); free(edf); } @@ -860,11 +871,14 @@ pr = ec->programs->data; ec->programs = evas_list_remove_list(ec->programs, ec->programs); - if (pr->name) evas_stringshare_del(pr->name); - if (pr->signal) evas_stringshare_del(pr->signal); - if (pr->source) evas_stringshare_del(pr->source); - if (pr->state) evas_stringshare_del(pr->state); - if (pr->state2) evas_stringshare_del(pr->state2); + if (edf->free_strings) + { + if (pr->name) evas_stringshare_del(pr->name); + if (pr->signal) evas_stringshare_del(pr->signal); + if (pr->source) evas_stringshare_del(pr->source); + if (pr->state) evas_stringshare_del(pr->state); + if (pr->state2) evas_stringshare_del(pr->state2); + } while (pr->targets) { Edje_Program_Target *prt; @@ -889,10 +903,10 @@ ep = ec->parts->data; ec->parts = evas_list_remove(ec->parts, ep); - if (ep->name) evas_stringshare_del(ep->name); + if (edf->free_strings && ep->name) evas_stringshare_del(ep->name); if (ep->default_desc) { - _edje_collection_free_part_description_free(ep->default_desc); + _edje_collection_free_part_description_free(ep->default_desc, edf->free_strings); ep->default_desc = NULL; } while (ep->other_desc) @@ -901,7 +915,7 @@ desc = ep->other_desc->data; ep->other_desc = evas_list_remove(ep->other_desc, desc); - _edje_collection_free_part_description_free(desc); + _edje_collection_free_part_description_free(desc, edf->free_strings); } free(ep); } @@ -913,12 +927,15 @@ edt = ec->data->data; ec->data = evas_list_remove(ec->data, edt); - if (edt->key) evas_stringshare_del(edt->key); - if (edt->value) evas_stringshare_del(edt->value); + if (edf->free_strings) + { + if (edt->key) evas_stringshare_del(edt->key); + if (edt->value) evas_stringshare_del(edt->value); + } free(edt); } } - if (ec->part) evas_stringshare_del(ec->part); + if (edf->free_strings && ec->part) evas_stringshare_del(ec->part); #ifdef EDJE_PROGRAM_CACHE if (ec->prog_cache.no_matches) evas_hash_free(ec->prog_cache.no_matches); if (ec->prog_cache.matches) @@ -934,9 +951,8 @@ } static void -_edje_collection_free_part_description_free(Edje_Part_Description *desc) +_edje_collection_free_part_description_free(Edje_Part_Description *desc, unsigned int free_strings) { - if (desc->state.name) evas_stringshare_del(desc->state.name); while (desc->image.tween_list) { Edje_Part_Image_Id *pi; @@ -945,13 +961,16 @@ desc->image.tween_list = evas_list_remove(desc->image.tween_list, pi); free(pi); } - if (desc->color_class) evas_stringshare_del(desc->color_class); - if (desc->text.text) evas_stringshare_del(desc->text.text); - if (desc->text.text_class) evas_stringshare_del(desc->text.text_class); - if (desc->text.style) evas_stringshare_del(desc->text.style); - if (desc->text.font) evas_stringshare_del(desc->text.font); - if (desc->gradient.type) evas_stringshare_del(desc->gradient.type); - if (desc->gradient.params) evas_stringshare_del(desc->gradient.params); + if (free_strings) + { + if (desc->color_class) evas_stringshare_del(desc->color_class); + if (desc->text.text) evas_stringshare_del(desc->text.text); + if (desc->text.text_class) evas_stringshare_del(desc->text.text_class); + if (desc->text.style) evas_stringshare_del(desc->text.style); + if (desc->text.font) evas_stringshare_del(desc->text.font); + if (desc->gradient.type) evas_stringshare_del(desc->gradient.type); + if (desc->gradient.params) evas_stringshare_del(desc->gradient.params); + } free(desc); } @@ -973,7 +992,7 @@ #ifdef EDJE_PROGRAM_CACHE static int -_edje_collection_free_prog_cache_matches_free_cb(Evas_Hash *hash, const char *key, void *data, void *fdata) +_edje_collection_free_prog_cache_matches_free_cb(const Evas_Hash *hash, const char *key, void *data, void *fdata) { evas_list_free((Evas_List *)data); return 1; =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_private.h,v retrieving revision 1.142 retrieving revision 1.143 diff -u -3 -r1.142 -r1.143 --- edje_private.h 29 Feb 2008 21:43:55 -0000 1.142 +++ edje_private.h 1 Mar 2008 06:38:09 -0000 1.143 @@ -294,6 +294,10 @@ Evas_Hash *font_hash; Evas_List *collection_cache; Evas_Hash *data_cache; + + Eet_File *ef; + + unsigned int free_strings : 1; }; struct _Edje_Style =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_textblock_styles.c,v retrieving revision 1.15 retrieving revision 1.16 diff -u -3 -r1.15 -r1.16 --- edje_textblock_styles.c 19 Jan 2008 00:24:53 -0000 1.15 +++ edje_textblock_styles.c 1 Mar 2008 06:38:09 -0000 1.16 @@ -410,7 +410,8 @@ /* Add and Handle tag parsed data */ if (ts) { - evas_stringshare_del(tag->value); + /* FIXME: How to know if the previous value was a stringshare */ +/* evas_stringshare_del(tag->value); */ tag->value = evas_stringshare_add(ts); buf = _edje_strbuf_append(buf, tag->value, &buflen, &bufalloc); free(ts); @@ -476,13 +477,17 @@ tag = stl->tags->data; stl->tags = evas_list_remove_list(stl->tags, stl->tags); - if (tag->key) evas_stringshare_del(tag->key); - if (tag->value) evas_stringshare_del(tag->value); - if (tag->text_class) evas_stringshare_del(tag->text_class); - if (tag->font) evas_stringshare_del(tag->font); - free(tag); + if (edf->free_strings) + { + if (tag->key) evas_stringshare_del(tag->key); +/* FIXME: Find a proper way to handle it. */ + if (tag->value) evas_stringshare_del(tag->value); + if (tag->text_class) evas_stringshare_del(tag->text_class); + if (tag->font) evas_stringshare_del(tag->font); + } + free(tag); } - if (stl->name) evas_stringshare_del(stl->name); + if (edf->free_strings && stl->name) evas_stringshare_del(stl->name); if (stl->style) evas_textblock_style_free(stl->style); free(stl); } ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs