From 833e075b9a83a154b670c3a57424590a8de654c0 Mon Sep 17 00:00:00 2001 From: Gustavo Sverzut Barbieri Date: Tue, 26 Feb 2008 17:56:51 +0000 Subject: [PATCH] Delay patterns destruction until patterns is not used anymore. Patch by Cedric BAIL. SVN revision: 33850 --- legacy/edje/src/lib/edje_program.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/legacy/edje/src/lib/edje_program.c b/legacy/edje/src/lib/edje_program.c index 2b4339aa7e..8b813c55eb 100644 --- a/legacy/edje/src/lib/edje_program.c +++ b/legacy/edje/src/lib/edje_program.c @@ -106,7 +106,8 @@ edje_object_signal_callback_add(Evas_Object *obj, const char *emission, const ch escb->just_added = 1; ed->just_added_callbacks = 1; } - _edje_clean_callbacks_patterns(ed); + else + _edje_clean_callbacks_patterns(ed); } /** Remove a callback from an object @@ -976,6 +977,10 @@ _edje_emit_cb(Edje *ed, const char *sig, const char *src) _edje_ref(ed); _edje_freeze(ed); _edje_block(ed); + + if (ed->just_added_callbacks) + _edje_clean_callbacks_patterns(ed); + ed->walking_callbacks = 1; if (ed->callbacks) @@ -1015,8 +1020,6 @@ _edje_emit_cb(Edje *ed, const char *sig, const char *src) escb->just_added = 0; if (escb->delete_me) { - _edje_clean_callbacks_patterns(ed); - ed->callbacks = evas_list_remove_list(ed->callbacks, l); if (escb->signal) evas_stringshare_del(escb->signal); if (escb->source) evas_stringshare_del(escb->source); @@ -1024,6 +1027,8 @@ _edje_emit_cb(Edje *ed, const char *sig, const char *src) } l = next_l; } + + _edje_clean_callbacks_patterns(ed); } break_prog: _edje_unblock(ed);