ug callback that deletes the object that is bing walked for callbacks...

ouch.. fix.


SVN revision: 15932
This commit is contained in:
Carsten Haitzler 2005-07-28 13:39:23 +00:00
parent 7c1ced7036
commit 3c16cf0327
3 changed files with 15 additions and 0 deletions

View File

@ -75,6 +75,12 @@ _edje_add(Evas_Object *obj)
void void
_edje_del(Edje *ed) _edje_del(Edje *ed)
{ {
if (ed->processing_messages)
{
ed->delete_me = 1;
return;
}
_edje_message_del(ed);
_edje_file_del(ed); _edje_file_del(ed);
if (ed->path) free(ed->path); if (ed->path) free(ed->path);
ed->path = NULL; ed->path = NULL;

View File

@ -592,11 +592,19 @@ _edje_message_queue_process(void)
while (tmp_msgq) while (tmp_msgq)
{ {
Edje_Message *em; Edje_Message *em;
Edje *ed;
em = tmp_msgq->data; em = tmp_msgq->data;
ed = em->edje;
ed->processing_messages++;
tmp_msgq = evas_list_remove_list(tmp_msgq, tmp_msgq); tmp_msgq = evas_list_remove_list(tmp_msgq, tmp_msgq);
_edje_message_process(em); _edje_message_process(em);
_edje_message_free(em); _edje_message_free(em);
ed->processing_messages--;
if (ed->processing_messages == 0)
{
if (ed->delete_me) _edje_del(ed);
}
} }
} }

View File

@ -473,6 +473,7 @@ struct _Edje
void *data; void *data;
} text_change; } text_change;
int processing_messages;
struct { struct {
int num; int num;
void (*func) (void *data, Evas_Object *obj, Edje_Message_Type type, int id, void *msg); void (*func) (void *data, Evas_Object *obj, Edje_Message_Type type, int id, void *msg);