diff --git a/legacy/edje/src/lib/Edje.h b/legacy/edje/src/lib/Edje.h index fb11c11164..1781e6b5bc 100644 --- a/legacy/edje/src/lib/Edje.h +++ b/legacy/edje/src/lib/Edje.h @@ -21,6 +21,7 @@ extern "C" { #endif void edje_init (void); + void edje_shutdown (void); void edje_frametime_set (double t); double edje_frametime_get (void); void edje_freeze (void); diff --git a/legacy/edje/src/lib/edje_data.c b/legacy/edje/src/lib/edje_data.c index 71bf1be7d7..7848b64ae2 100644 --- a/legacy/edje/src/lib/edje_data.c +++ b/legacy/edje/src/lib/edje_data.c @@ -24,6 +24,30 @@ Eet_Data_Descriptor *_edje_edd_edje_part_image_id = NULL; (void *(*) (void *, const char *, void *))evas_hash_add, \ (void (*) (void *))evas_hash_free) +#define FREED(eed) \ + if (eed) \ + { \ + eet_data_descriptor_free((eed)); \ + (eed) = NULL; \ + } + +void +_edje_edd_free(void) +{ + FREED(_edje_edd_edje_file); + FREED(_edje_edd_edje_data); + FREED(_edje_edd_edje_image_directory); + FREED(_edje_edd_edje_image_directory_entry); + FREED(_edje_edd_edje_program); + FREED(_edje_edd_edje_program_target); + FREED(_edje_edd_edje_part_collection_directory); + FREED(_edje_edd_edje_part_collection_directory_entry); + FREED(_edje_edd_edje_part_collection); + FREED(_edje_edd_edje_part); + FREED(_edje_edd_edje_part_description); + FREED(_edje_edd_edje_part_image_id); +} + void _edje_edd_setup(void) { diff --git a/legacy/edje/src/lib/edje_main.c b/legacy/edje/src/lib/edje_main.c index 58a5370be0..e0b839c657 100644 --- a/legacy/edje/src/lib/edje_main.c +++ b/legacy/edje/src/lib/edje_main.c @@ -1,17 +1,27 @@ #include "Edje.h" #include "edje_private.h" +static int initted = 0; + void edje_init(void) { - static int initted = 0; - if (initted) return; initted = 1; _edje_edd_setup(); _edje_text_init(); } +void +edje_shutdown(void) +{ + if (!initted) return; + + _edje_edd_free(); + + initted = 0; +} + Edje * _edje_add(Evas_Object *obj) { diff --git a/legacy/edje/src/lib/edje_private.h b/legacy/edje/src/lib/edje_private.h index 03c9c5f636..9c2968f250 100644 --- a/legacy/edje/src/lib/edje_private.h +++ b/legacy/edje/src/lib/edje_private.h @@ -560,6 +560,7 @@ int _edje_timer_cb(void *data); int _edje_pending_timer_cb(void *data); void _edje_edd_setup(void); +void _edje_edd_free(void); void _edje_file_add(Edje *ed); void _edje_file_del(Edje *ed);