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
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs