1
#include "edje_private.h"
3
Eina_Hash *_edje_file_hash = NULL;
4
Eina_Hash *_edje_id_hash = NULL;
6
static Eina_Hash *_edje_requires_pending;
7
static int _edje_file_cache_size = 16;
8
static Eina_List *_edje_file_cache = NULL;
10
static int _edje_collection_cache_size = 16;
13
edje_cache_emp_alloc(Edje_Part_Collection_Directory_Entry *ce)
17
ce->mp = calloc(1, sizeof(Edje_Part_Collection_Directory_Entry_Mp));
20
#define INIT_EMP(Tp, Sz, Ce) \
21
buffer = alloca(strlen(ce->entry) + strlen(#Tp) + 2); \
22
sprintf(buffer, "%s/%s", ce->entry, #Tp); \
23
Ce->mp->mp.Tp = eina_mempool_add("one_big", buffer, NULL, sizeof (Sz), Ce->count.Tp); \
24
_emp_##Tp = Ce->mp->mp.Tp;
26
#define INIT_EMP_BOTH(Tp, Sz, Ce) \
27
INIT_EMP(Tp, Sz, Ce) \
28
Ce->mp->mp_rtl.Tp = eina_mempool_add("one_big", buffer, NULL, \
29
sizeof(Sz), Ce->count.Tp);
31
INIT_EMP_BOTH(RECTANGLE, Edje_Part_Description_Common, ce);
32
INIT_EMP_BOTH(TEXT, Edje_Part_Description_Text, ce);
33
INIT_EMP_BOTH(IMAGE, Edje_Part_Description_Image, ce);
34
INIT_EMP_BOTH(PROXY, Edje_Part_Description_Proxy, ce);
35
INIT_EMP_BOTH(SWALLOW, Edje_Part_Description_Common, ce);
36
INIT_EMP_BOTH(TEXTBLOCK, Edje_Part_Description_Text, ce);
37
INIT_EMP_BOTH(GROUP, Edje_Part_Description_Common, ce);
38
INIT_EMP_BOTH(BOX, Edje_Part_Description_Box, ce);
39
INIT_EMP_BOTH(TABLE, Edje_Part_Description_Table, ce);
40
INIT_EMP_BOTH(EXTERNAL, Edje_Part_Description_External, ce);
41
INIT_EMP_BOTH(SPACER, Edje_Part_Description_Common, ce);
42
INIT_EMP_BOTH(SNAPSHOT, Edje_Part_Description_Snapshot, ce);
43
INIT_EMP_BOTH(VECTOR, Edje_Part_Description_Vector, ce);
44
INIT_EMP(part, Edje_Part, ce);
48
edje_cache_emp_free(Edje_Part_Collection_Directory_Entry *ce)
54
eina_mempool_del(ce->mp->mp.RECTANGLE);
55
eina_mempool_del(ce->mp->mp.TEXT);
56
eina_mempool_del(ce->mp->mp.IMAGE);
57
eina_mempool_del(ce->mp->mp.PROXY);
58
eina_mempool_del(ce->mp->mp.SWALLOW);
59
eina_mempool_del(ce->mp->mp.TEXTBLOCK);
60
eina_mempool_del(ce->mp->mp.GROUP);
61
eina_mempool_del(ce->mp->mp.BOX);
62
eina_mempool_del(ce->mp->mp.TABLE);
63
eina_mempool_del(ce->mp->mp.EXTERNAL);
64
eina_mempool_del(ce->mp->mp.SPACER);
65
eina_mempool_del(ce->mp->mp.SNAPSHOT);
66
eina_mempool_del(ce->mp->mp.VECTOR);
67
eina_mempool_del(ce->mp->mp.part);
68
memset(&ce->mp->mp, 0, sizeof(ce->mp->mp));
70
eina_mempool_del(ce->mp->mp_rtl.RECTANGLE);
71
eina_mempool_del(ce->mp->mp_rtl.TEXT);
72
eina_mempool_del(ce->mp->mp_rtl.IMAGE);
73
eina_mempool_del(ce->mp->mp_rtl.PROXY);
74
eina_mempool_del(ce->mp->mp_rtl.SWALLOW);
75
eina_mempool_del(ce->mp->mp_rtl.TEXTBLOCK);
76
eina_mempool_del(ce->mp->mp_rtl.GROUP);
77
eina_mempool_del(ce->mp->mp_rtl.BOX);
78
eina_mempool_del(ce->mp->mp_rtl.TABLE);
79
eina_mempool_del(ce->mp->mp_rtl.EXTERNAL);
80
eina_mempool_del(ce->mp->mp_rtl.SPACER);
81
eina_mempool_del(ce->mp->mp_rtl.SNAPSHOT);
82
eina_mempool_del(ce->mp->mp_rtl.VECTOR);
83
memset(&ce->mp->mp_rtl, 0, sizeof(ce->mp->mp_rtl));
89
_edje_programs_patterns_init(Edje_Part_Collection *edc)
91
Edje_Signals_Sources_Patterns *ssp = &edc->patterns.programs;
95
if (ssp->signals_patterns)
98
static signed char dump_programs = -1;
100
if (dump_programs == -1)
102
if (getenv("EDJE_DUMP_PROGRAMS")) dump_programs = 1;
103
else dump_programs = 0;
105
if (dump_programs == 1)
107
INF("Group '%s' programs:", edc->part);
108
#define EDJE_DUMP_PROGRAM(Section) \
109
for (i = 0; i < edc->programs.Section##_count; i++) \
110
INF(#Section " for ('%s', '%s')", edc->programs.Section[i]->signal, edc->programs.Section[i]->source);
112
EDJE_DUMP_PROGRAM(strcmp);
113
EDJE_DUMP_PROGRAM(strncmp);
114
EDJE_DUMP_PROGRAM(strrncmp);
115
EDJE_DUMP_PROGRAM(fnmatch);
116
EDJE_DUMP_PROGRAM(nocmp);
119
edje_match_program_hash_build(edc->programs.strcmp,
120
edc->programs.strcmp_count,
123
j = edc->programs.strncmp_count
124
+ edc->programs.strrncmp_count
125
+ edc->programs.fnmatch_count
126
+ edc->programs.nocmp_count;
129
all = malloc(sizeof (Edje_Program *) * j);
134
#define EDJE_LOAD_PROGRAMS_ADD(Array, Edc, It, Git, All) \
135
for (It = 0; It < Edc->programs.Array##_count; ++It, ++Git) \
136
All[Git] = Edc->programs.Array[It];
138
EDJE_LOAD_PROGRAMS_ADD(fnmatch, edc, i, j, all);
139
EDJE_LOAD_PROGRAMS_ADD(strncmp, edc, i, j, all);
140
EDJE_LOAD_PROGRAMS_ADD(strrncmp, edc, i, j, all);
142
EDJE_LOAD_PROGRAMS_ADD(nocmp, edc, i, j, all);
144
ssp->u.programs.globing = all;
145
ssp->u.programs.count = j;
146
ssp->signals_patterns = edje_match_programs_signal_init(all, j);
147
ssp->sources_patterns = edje_match_programs_source_init(all, j);
151
_edje_part_collection_fix(Edje_Part_Collection *edc)
153
if (edc->checked) return;
161
eina_array_step_set(&hist, sizeof(Eina_Array), 5);
163
for (j = 0; j < edc->parts_count; ++j)
169
eina_array_push(&hist, ep);
171
while (ep2->dragable.confine_id >= 0)
173
if (ep2->dragable.confine_id >= (int)edc->parts_count)
175
ERR("confine_to above limit. invalidating it.");
176
ep2->dragable.confine_id = -1;
180
ep2 = edc->parts[ep2->dragable.confine_id];
181
if (eina_array_find(&hist, ep2, NULL))
183
ERR("confine_to loops. invalidating loop.");
184
ep2->dragable.confine_id = -1;
187
eina_array_push(&hist, ep2);
189
eina_array_clean(&hist);
191
eina_array_push(&hist, ep);
193
while (ep2->dragable.event_id >= 0)
197
if (ep2->dragable.event_id >= (int)edc->parts_count)
199
ERR("event_id above limit. invalidating it.");
200
ep2->dragable.event_id = -1;
205
ep2 = edc->parts[ep2->dragable.event_id];
207
if (!ep2->dragable.x && !ep2->dragable.y)
209
prev->dragable.event_id = -1;
213
if (eina_array_find(&hist, ep2, NULL))
215
ERR("events_to loops. invalidating loop.");
216
ep2->dragable.event_id = -1;
219
eina_array_push(&hist, ep2);
221
eina_array_clean(&hist);
223
eina_array_push(&hist, ep);
225
while (ep2->clip_to_id >= 0)
227
if (ep2->clip_to_id >= (int)edc->parts_count)
229
ERR("clip_to_id above limit. invalidating it.");
230
ep2->clip_to_id = -1;
234
ep2 = edc->parts[ep2->clip_to_id];
235
if (eina_array_find(&hist, ep2, NULL))
237
ERR("clip_to loops. invalidating loop.");
238
ep2->clip_to_id = -1;
241
eina_array_push(&hist, ep2);
243
eina_array_clean(&hist);
245
eina_array_flush(&hist);
248
static Edje_Part_Collection *
249
_edje_file_coll_open(Edje_File *edf, const char *coll)
251
Edje_Part_Collection *edc = NULL;
252
Edje_Part_Collection_Directory_Entry *ce;
253
int id = -1, size = 0;
259
ce = eina_hash_find(edf->collection, coll);
260
if (!ce) return NULL;
264
ce->ref->references++;
268
EINA_LIST_FOREACH(edf->collection_cache, l, edc)
270
if (!strcmp(edc->part, coll))
275
edf->collection_cache = eina_list_remove_list(edf->collection_cache, l);
281
if (id < 0) return NULL;
283
edje_cache_emp_alloc(ce);
284
snprintf(buf, sizeof(buf), "edje/collections/%i", id);
285
edc = eet_data_read(edf->ef, _edje_edd_edje_part_collection, buf);
286
if (!edc) return NULL;
289
edc->part = ce->entry;
292
if (edf->version <= 3 && edf->minor <= 1)
298
edc->broadcast_signal = EINA_FALSE;
301
for (i = 0; i < edc->parts_count; ++i)
303
if (edc->parts[i]->type == EDJE_PART_TYPE_TEXTBLOCK)
305
Edje_Part_Description_Text *text;
308
text = (Edje_Part_Description_Text *)edc->parts[i]->default_desc;
309
text->text.align.x = TO_DOUBLE(0.0);
310
text->text.align.y = TO_DOUBLE(0.0);
312
for (j = 0; j < edc->parts[i]->other.desc_count; ++j)
314
text = (Edje_Part_Description_Text *)edc->parts[i]->other.desc[j];
315
text->text.align.x = TO_DOUBLE(0.0);
316
text->text.align.y = TO_DOUBLE(0.0);
322
snprintf(buf, sizeof(buf), "edje/scripts/embryo/compiled/%i", id);
323
data = eet_read(edf->ef, buf, &size);
327
edc->script = embryo_program_new(data, size);
328
_edje_embryo_script_init(edc);
332
snprintf(buf, sizeof(buf), "edje/scripts/lua/%i", id);
333
data = eet_read(edf->ef, buf, &size);
337
_edje_lua2_script_load(edc, data, size);
343
_edje_programs_patterns_init(edc);
345
n = edc->programs.fnmatch_count +
346
edc->programs.strcmp_count +
347
edc->programs.strncmp_count +
348
edc->programs.strrncmp_count +
349
edc->programs.nocmp_count;
356
edc->patterns.table_programs = malloc(sizeof(Edje_Program *) * n);
357
if (edc->patterns.table_programs)
359
edc->patterns.table_programs_size = n;
361
#define EDJE_LOAD_BUILD_TABLE(Array, Edc, It, Tmp) \
362
for (It = 0; It < Edc->programs.Array##_count; ++It) \
364
Tmp = Edc->programs.Array[It]; \
365
Edc->patterns.table_programs[Tmp->id] = Tmp; \
366
if (!Edc->need_seat && Tmp->signal && !strncmp(Tmp->signal, "seat,", 5)) \
367
Edc->need_seat = EINA_TRUE; \
370
EDJE_LOAD_BUILD_TABLE(fnmatch, edc, i, pr);
371
EDJE_LOAD_BUILD_TABLE(strcmp, edc, i, pr);
372
EDJE_LOAD_BUILD_TABLE(strncmp, edc, i, pr);
373
EDJE_LOAD_BUILD_TABLE(strrncmp, edc, i, pr);
374
EDJE_LOAD_BUILD_TABLE(nocmp, edc, i, pr);
383
for (i = 0; i < edc->parts_count; i++)
385
Edje_Part *part = edc->parts[i];
387
if (part->allowed_seats)
389
edc->need_seat = EINA_TRUE;
395
_edje_part_collection_fix(edc);
401
_edje_extract_mo_files(Edje_File *edf)
403
Eina_Strbuf *mo_id_str;
405
const char *cache_path;
406
const char *filename;
413
cache_path = efreet_cache_home_get();
415
t = eina_file_mtime_get(edf->f);
416
sz = eina_file_size_get(edf->f);
417
filename = eina_file_filename_get(edf->f);
418
crc = eina_crc(filename, strlen(filename), 0xffffffff, EINA_TRUE);
420
snprintf(edf->fid, sizeof(edf->fid), "%lld-%lld-%x",
425
mo_id_str = eina_strbuf_new();
427
for (i = 0; i < edf->mo_dir->mo_entries_count; i++)
430
char out[PATH_MAX + PATH_MAX + 128];
431
char outdir[PATH_MAX];
435
mo_entry = &edf->mo_dir->mo_entries[i];
437
eina_strbuf_append_printf(mo_id_str,
438
"edje/mo/%i/%s/LC_MESSAGES",
441
data = eet_read_direct(edf->ef,
442
eina_strbuf_string_get(mo_id_str),
447
snprintf(outdir, sizeof(outdir),
448
"%s/edje/%s/LC_MESSAGES",
449
cache_path, mo_entry->locale);
450
ecore_file_mkpath(outdir);
451
mo_src = strdup(mo_entry->mo_src);
452
sub_str = strstr(mo_src, ".po");
457
snprintf(out, sizeof(out), "%s/%s-%s",
458
outdir, edf->fid, mo_src);
459
if (ecore_file_exists(out))
461
if (edf->mtime > ecore_file_mod_time(out))
462
ecore_file_remove(out);
464
if (!ecore_file_exists(out))
468
f = fopen(out, "wb");
471
if (fwrite(data, len, 1, f) != 1)
472
ERR("Could not write mo: %s: %s", out, strerror(errno));
476
ERR("Could not open for writing mo: %s: %s", out, strerror(errno));
481
eina_strbuf_reset(mo_id_str);
484
eina_strbuf_free(mo_id_str);
490
extern size_t _edje_data_string_mapping_size;
491
extern void *_edje_data_string_mapping;
494
_edje_file_open(const Eina_File *f, int *error_ret, time_t mtime, Eina_Bool coll)
496
Edje_Color_Tree_Node *ctn;
497
Edje_Color_Class *cc;
511
*error_ret = EDJE_LOAD_ERROR_UNKNOWN_FORMAT;
515
mapping = eina_file_map_all((Eina_File *)f, EINA_FILE_SEQUENTIAL);
518
mapping_size = eina_file_size_get(f);
519
_edje_data_string_mapping = mapping;
520
_edje_data_string_mapping_size = mapping_size;
522
edf = eet_data_read(ef, _edje_edd_edje_file, "edje/file");
526
eina_file_map_free((Eina_File *)f, mapping);
527
_edje_data_string_mapping = NULL;
531
*error_ret = EDJE_LOAD_ERROR_CORRUPT_FILE;
536
edf->f = eina_file_dup(f);
540
if (edf->version != EDJE_FILE_VERSION)
542
*error_ret = EDJE_LOAD_ERROR_INCOMPATIBLE_FILE;
543
_edje_file_free(edf);
546
if (!edf->collection && coll)
548
*error_ret = EDJE_LOAD_ERROR_CORRUPT_FILE;
549
_edje_file_free(edf);
553
if (edf->minor > EDJE_FILE_MINOR)
555
WRN("`%s` may use feature from a newer edje and could not show up as expected.",
556
eina_file_filename_get(f));
558
if (edf->base_scale <= ZERO)
560
edf->base_scale = FROM_INT(1);
561
WRN("The base_scale can not be a 0.0. It is changed the default value(1.0)");
565
if ((edf->efl_version.major == 0) && (edf->efl_version.minor == 0))
567
edf->efl_version.major = 1;
568
edf->efl_version.minor = 18;
571
edf->path = eina_stringshare_add(eina_file_filename_get(f));
575
_edje_file_textblock_style_parse_and_fix(edf);
577
edf->style_hash = eina_hash_string_small_new(NULL);
578
EINA_LIST_FOREACH(edf->styles, l, stl)
580
eina_hash_direct_add(edf->style_hash, stl->name, stl);
582
edf->color_tree_hash = eina_hash_string_small_new(NULL);
583
EINA_LIST_FOREACH(edf->color_tree, l, ctn)
584
EINA_LIST_FOREACH(ctn->color_classes, ll, name)
585
eina_hash_add(edf->color_tree_hash, name, ctn);
587
edf->color_hash = eina_hash_string_small_new(NULL);
588
EINA_LIST_FOREACH(edf->color_classes, l, cc)
590
eina_hash_direct_add(edf->color_hash, cc->name, cc);
592
edf->text_hash = eina_hash_string_small_new(NULL);
593
EINA_LIST_FOREACH(edf->text_classes, l, tc)
596
eina_hash_direct_add(edf->text_hash, tc->name, tc);
599
tc->font = eina_stringshare_add(tc->font);
602
edf->size_hash = eina_hash_string_small_new(NULL);
603
EINA_LIST_FOREACH(edf->size_classes, l, sc)
605
eina_hash_direct_add(edf->size_hash, sc->name, sc);
607
if (edf->requires_count)
610
Edje_File *required_edf;
611
char **requires = (char**)edf->requires;
614
edf->requires = malloc(edf->requires_count * sizeof(char*));
615
for (i = 0; i < edf->requires_count; i++)
617
char *str = (char*)requires[i];
619
edf->requires[i] = eina_stringshare_add(str);
620
required_edf = eina_hash_find(_edje_id_hash, edf->requires[i]);
623
required_edf->references++;
626
ERR("edje file '%s' REQUIRES file '%s' which is not loaded", edf->path, edf->requires[i]);
627
if (!_edje_requires_pending)
628
_edje_requires_pending = eina_hash_stringshared_new(NULL);
629
eina_hash_list_append(_edje_requires_pending, edf->requires[i], edf);
633
if (_edje_requires_pending && edf->id)
635
l = eina_hash_set(_edje_requires_pending, edf->id, NULL);
637
edf->references += eina_list_count(l);
640
if (!eina_hash_population(_edje_requires_pending))
642
eina_hash_free(_edje_requires_pending);
643
_edje_requires_pending = NULL;
647
if (edf->external_dir)
651
for (i = 0; i < edf->external_dir->entries_count; ++i)
652
edje_module_load(edf->external_dir->entries[i].entry);
661
_edje_extract_mo_files(edf);
669
_edje_file_dangling(Edje_File *edf)
671
if (edf->dangling) return;
672
edf->dangling = EINA_TRUE;
674
eina_hash_del(_edje_file_hash, &edf->f, edf);
675
if (!eina_hash_population(_edje_file_hash))
677
eina_hash_free(_edje_file_hash);
678
_edje_file_hash = NULL;
685
_edje_file_cache_init()
688
_edje_id_hash = eina_hash_stringshared_new(NULL);
689
if (!_edje_file_hash)
690
_edje_file_hash = eina_hash_pointer_new(NULL);
693
static inline Edje_File*
694
_edje_file_cache_trash_pop(const Eina_File *file)
699
EINA_LIST_FOREACH(_edje_file_cache, l, edf)
704
_edje_file_cache = eina_list_remove_list(_edje_file_cache, l);
705
eina_hash_direct_add(_edje_file_hash, &edf->f, edf);
713
_edje_file_cache_find(const Eina_File *file)
718
_edje_file_cache_init();
721
edf = eina_hash_find(_edje_file_hash, &file);
729
return _edje_file_cache_trash_pop(file);
733
_edje_file_cache_add(Edje_File *edf)
735
eina_hash_direct_add(_edje_file_hash, &edf->f, edf);
737
eina_hash_list_append(_edje_id_hash, edf->id, edf);
741
_edje_cache_file_coll_open(const Eina_File *file, const char *coll, int *error_ret, Edje_Part_Collection **edc_ret, Edje *ed EINA_UNUSED)
744
Edje_Part_Collection *edc;
746
edf = _edje_file_cache_find(file);
750
edf = _edje_file_open(file, error_ret, eina_file_mtime_get(file), !!coll);
751
if (!edf) return NULL;
752
_edje_file_cache_add(edf);
758
edc = _edje_file_coll_open(edf, coll);
760
*error_ret = EDJE_LOAD_ERROR_UNKNOWN_COLLECTION;
762
if (edc_ret) *edc_ret = edc;
768
_edje_cache_coll_clean(Edje_File *edf)
770
while ((edf->collection_cache) &&
771
(eina_list_count(edf->collection_cache) > (unsigned int)_edje_collection_cache_size))
773
Edje_Part_Collection_Directory_Entry *ce;
774
Edje_Part_Collection *edc;
776
edc = eina_list_data_get(eina_list_last(edf->collection_cache));
777
edf->collection_cache = eina_list_remove_list(edf->collection_cache, eina_list_last(edf->collection_cache));
779
ce = eina_hash_find(edf->collection, edc->part);
780
_edje_collection_free(edf, edc, ce);
785
_edje_cache_coll_flush(Edje_File *edf)
787
while (edf->collection_cache)
789
Edje_Part_Collection_Directory_Entry *ce;
790
Edje_Part_Collection *edc;
793
last = eina_list_last(edf->collection_cache);
794
edc = eina_list_data_get(last);
795
edf->collection_cache = eina_list_remove_list(edf->collection_cache,
798
ce = eina_hash_find(edf->collection, edc->part);
799
_edje_collection_free(edf, edc, ce);
804
_edje_cache_coll_unref(Edje_File *edf, Edje_Part_Collection *edc)
806
Edje_Part_Collection_Directory_Entry *ce;
809
if (edc->references != 0) return;
811
ce = eina_hash_find(edf->collection, edc->part);
814
ERR("Something is wrong with reference count of '%s'.", edc->part);
823
_edje_collection_free(edf, edc, ce);
824
_edje_cache_coll_flush(edf);
828
edf->collection_cache = eina_list_prepend(edf->collection_cache, edc);
829
_edje_cache_coll_clean(edf);
835
_edje_cache_file_clean(void)
839
count = eina_list_count(_edje_file_cache);
840
while ((_edje_file_cache) && (count > _edje_file_cache_size))
845
last = eina_list_last(_edje_file_cache);
846
edf = eina_list_data_get(last);
847
_edje_file_cache = eina_list_remove_list(_edje_file_cache, last);
848
_edje_file_free(edf);
849
count = eina_list_count(_edje_file_cache);
854
_edje_cache_file_unref(Edje_File *edf)
857
if (edf->references != 0) return;
859
if (edf->requires_count)
863
for (i = 0; i < edf->requires_count; i++)
865
Edje_File *required_edf = eina_hash_find(_edje_id_hash, edf->requires[i]);
868
_edje_cache_file_unref(edf);
869
else if (_edje_requires_pending)
871
eina_hash_list_remove(_edje_requires_pending, edf->requires[i], edf);
872
if (!eina_hash_population(_edje_requires_pending))
874
eina_hash_free(_edje_requires_pending);
875
_edje_requires_pending = NULL;
883
_edje_file_free(edf);
888
eina_hash_list_remove(_edje_id_hash, edf->id, edf);
889
if (!eina_hash_population(_edje_id_hash))
891
eina_hash_free(_edje_id_hash);
892
_edje_id_hash = NULL;
894
eina_hash_del(_edje_file_hash, &edf->f, edf);
895
if (!eina_hash_population(_edje_file_hash))
897
eina_hash_free(_edje_file_hash);
898
_edje_file_hash = NULL;
900
_edje_file_cache = eina_list_prepend(_edje_file_cache, edf);
901
_edje_cache_file_clean();
905
_edje_file_cache_shutdown(void)
907
edje_file_cache_flush();
919
edje_file_cache_set(int count)
921
if (count < 0) count = 0;
922
_edje_file_cache_size = count;
923
_edje_cache_file_clean();
927
edje_file_cache_get(void)
929
return _edje_file_cache_size;
933
edje_file_cache_flush(void)
937
ps = _edje_file_cache_size;
938
_edje_file_cache_size = 0;
939
_edje_cache_file_clean();
940
_edje_file_cache_size = ps;
944
edje_collection_cache_set(int count)
949
if (count < 0) count = 0;
950
_edje_collection_cache_size = count;
951
EINA_LIST_FOREACH(_edje_file_cache, l, edf)
952
_edje_cache_coll_clean(edf);
957
edje_collection_cache_get(void)
959
return _edje_collection_cache_size;
963
edje_collection_cache_flush(void)
969
ps = _edje_collection_cache_size;
970
_edje_collection_cache_size = 0;
971
EINA_LIST_FOREACH(_edje_file_cache, l, edf)
972
_edje_cache_coll_flush(edf);
974
_edje_collection_cache_size = ps;