summaryrefslogtreecommitdiff
path: root/legacy
diff options
context:
space:
mode:
authorCarsten Haitzler <raster@rasterman.com>2005-07-28 13:39:23 +0000
committerCarsten Haitzler <raster@rasterman.com>2005-07-28 13:39:23 +0000
commit3c16cf0327f848bc794c827af1aa3d6f64b58d09 (patch)
treeebded63c907528c15052b5f3747090bd90f726a3 /legacy
parent7c1ced70369af7a591837c9618c4a42653c1490a (diff)
ug callback that deletes the object that is bing walked for callbacks...
ouch.. fix. SVN revision: 15932
Diffstat (limited to 'legacy')
-rw-r--r--legacy/edje/src/lib/edje_main.c6
-rw-r--r--legacy/edje/src/lib/edje_message_queue.c8
-rw-r--r--legacy/edje/src/lib/edje_private.h1
3 files changed, 15 insertions, 0 deletions
diff --git a/legacy/edje/src/lib/edje_main.c b/legacy/edje/src/lib/edje_main.c
index 513999b813..60e8413522 100644
--- a/legacy/edje/src/lib/edje_main.c
+++ b/legacy/edje/src/lib/edje_main.c
@@ -75,6 +75,12 @@ _edje_add(Evas_Object *obj)
75void 75void
76_edje_del(Edje *ed) 76_edje_del(Edje *ed)
77{ 77{
78 if (ed->processing_messages)
79 {
80 ed->delete_me = 1;
81 return;
82 }
83 _edje_message_del(ed);
78 _edje_file_del(ed); 84 _edje_file_del(ed);
79 if (ed->path) free(ed->path); 85 if (ed->path) free(ed->path);
80 ed->path = NULL; 86 ed->path = NULL;
diff --git a/legacy/edje/src/lib/edje_message_queue.c b/legacy/edje/src/lib/edje_message_queue.c
index eb484c3884..ca808120c1 100644
--- a/legacy/edje/src/lib/edje_message_queue.c
+++ b/legacy/edje/src/lib/edje_message_queue.c
@@ -592,11 +592,19 @@ _edje_message_queue_process(void)
592 while (tmp_msgq) 592 while (tmp_msgq)
593 { 593 {
594 Edje_Message *em; 594 Edje_Message *em;
595 Edje *ed;
595 596
596 em = tmp_msgq->data; 597 em = tmp_msgq->data;
598 ed = em->edje;
599 ed->processing_messages++;
597 tmp_msgq = evas_list_remove_list(tmp_msgq, tmp_msgq); 600 tmp_msgq = evas_list_remove_list(tmp_msgq, tmp_msgq);
598 _edje_message_process(em); 601 _edje_message_process(em);
599 _edje_message_free(em); 602 _edje_message_free(em);
603 ed->processing_messages--;
604 if (ed->processing_messages == 0)
605 {
606 if (ed->delete_me) _edje_del(ed);
607 }
600 } 608 }
601 } 609 }
602 610
diff --git a/legacy/edje/src/lib/edje_private.h b/legacy/edje/src/lib/edje_private.h
index e35a61a8d0..db46708a47 100644
--- a/legacy/edje/src/lib/edje_private.h
+++ b/legacy/edje/src/lib/edje_private.h
@@ -473,6 +473,7 @@ struct _Edje
473 void *data; 473 void *data;
474 } text_change; 474 } text_change;
475 475
476 int processing_messages;
476 struct { 477 struct {
477 int num; 478 int num;
478 void (*func) (void *data, Evas_Object *obj, Edje_Message_Type type, int id, void *msg); 479 void (*func) (void *data, Evas_Object *obj, Edje_Message_Type type, int id, void *msg);