jackdanielz pushed a commit to branch master. http://git.enlightenment.org/tools/erigo.git/commit/?id=18bd84ea24d020b15de32aaf6cdd5b1f712531f0
commit 18bd84ea24d020b15de32aaf6cdd5b1f712531f0 Author: Daniel Zaoui <[email protected]> Date: Sun Nov 1 10:57:51 2015 +0200 Generator: free public widgets structure on main widget deletion --- src/lib/generator.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/lib/generator.c b/src/lib/generator.c index 757f781..688cf73 100644 --- a/src/lib/generator.c +++ b/src/lib/generator.c @@ -39,6 +39,8 @@ typedef struct Eina_Bool inside_item_creation:1; /* Flag to indicate the widget creation is done from an item creation */ } Widget_Context; +static Eina_Bool _pub_free_cb_created = EINA_FALSE; + /* Check if current eid is in list of Eids */ static Eina_Bool _is_in_list(const Eina_List *lst, Eid *eid) @@ -539,6 +541,22 @@ _wdg_creation_function_generate(Gui_Session *session, Gui_Widget *wdg, Widget_Co manager_widget_create(session, wdg, wdg_ctx); + if (!_pub_free_cb_created) + { + eina_strbuf_prepend_printf(head, + "static Eina_Bool\n" + "_pubs_free_cb(void *data, Eo *obj EINA_UNUSED, const Eo_Event_Description *desc EINA_UNUSED, void *event_info EINA_UNUSED)\n" + "{\n" + " free(data);\n" + " return EINA_TRUE;\n" + "}\n\n"); + _pub_free_cb_created = EINA_TRUE; + } + + eina_strbuf_append_printf(wdg_ctx->buf, + " eo_do(%s, eo_event_callback_add(EO_BASE_EVENT_DEL, _pubs_free_cb, pub_widgets));", + wdg_name); + Eina_Iterator *iter = eina_hash_iterator_data_new(wdg_ctx->cbs_bufs_hash); Eina_Strbuf *cb_code_buf; EINA_ITERATOR_FOREACH(iter, cb_code_buf) @@ -1086,6 +1104,7 @@ generator_ctx_source_generate(const Gui_Context *ctx, Generator_Export_Format fo funcs->content_set = _content_set_generate; funcs->item_add = _item_add_generate; + _pub_free_cb_created = EINA_FALSE; _ctx_to_file_save(ctx, format); } --
