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);
 }
 

-- 


Reply via email to