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

Reply via email to