Enlightenment CVS committal Author : raster Project : e17 Module : libs/edje
Dir : e17/libs/edje/src/lib Modified Files: Edje.h edje_message_queue.c Log Message: more message queue calls =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/Edje.h,v retrieving revision 1.36 retrieving revision 1.37 diff -u -3 -r1.36 -r1.37 --- Edje.h 11 Sep 2004 02:41:23 -0000 1.36 +++ Edje.h 11 Sep 2004 02:59:23 -0000 1.37 @@ -193,10 +193,11 @@ void edje_object_part_drag_page (Evas_Object *obj, const char *part, double dx, double dy); /* edje_message_queue.c */ - void edje_object_message_send (Evas_Object *obj, Edje_Message_Type type, int id, void *msg); - void edje_object_message_handler_set (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj, Edje_Message_Type type, int id, void *msg), void *data); - - void edje_message_signal_process (void); + void edje_object_message_send (Evas_Object *obj, Edje_Message_Type type, int id, void *msg); + void edje_object_message_handler_set (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj, Edje_Message_Type type, int id, void *msg), void *data); + void edje_object_message_signal_process (Evas_Object *obj); + + void edje_message_signal_process (void); #ifdef __cplusplus } =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_message_queue.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -3 -r1.9 -r1.10 --- edje_message_queue.c 11 Sep 2004 02:41:23 -0000 1.9 +++ edje_message_queue.c 11 Sep 2004 02:59:23 -0000 1.10 @@ -4,6 +4,9 @@ Ecore_Job *job = NULL; +static Evas_List *msgq = NULL; +static Evas_List *tmp_msgq = NULL; + void edje_object_message_send(Evas_Object *obj, Edje_Message_Type type, int id, void *msg) { @@ -25,14 +28,57 @@ } void +edje_object_message_signal_process(Evas_Object *obj) +{ + Evas_List *l, *tmpq = NULL; + Edje *ed; + + ed = _edje_fetch(obj); + if (!ed) return; + + for (l = msgq; l; l = l->next) + { + Edje_Message *em; + + em = l->data; + if (em->edje == ed) + tmpq = evas_list_append(tmpq, em); + } + /* now remove them from the old queue */ + for (l = tmpq; l; l = l->next) + msgq = evas_list_remove(msgq, l->data); + /* a temporary message queue */ + if (tmp_msgq) + { + while (tmpq) + { + tmp_msgq = evas_list_append(tmp_msgq, tmpq->data); + tmpq = evas_list_remove_list(tmpq, tmpq); + } + } + else + { + tmp_msgq = tmpq; + tmpq = NULL; + } + + while (tmp_msgq) + { + Edje_Message *em; + + em = tmp_msgq->data; + tmp_msgq = evas_list_remove_list(tmp_msgq, tmp_msgq); + _edje_message_process(em); + _edje_message_free(em); + } +} + +void edje_message_signal_process(void) { _edje_message_queue_process(); } -static Evas_List *msgq = NULL; -static Evas_List *tmp_msgq = NULL; - static int _edje_dummy_timer(void *data) { @@ -482,8 +528,19 @@ for (i = 0; (i < 8) && (msgq); i++) { /* a temporary message queue */ - tmp_msgq = msgq; - msgq = NULL; + if (tmp_msgq) + { + while (msgq) + { + tmp_msgq = evas_list_append(tmp_msgq, msgq->data); + msgq = evas_list_remove_list(msgq, msgq); + } + } + else + { + tmp_msgq = msgq; + msgq = NULL; + } while (tmp_msgq) { @@ -513,6 +570,14 @@ msgq = evas_list_remove_list(msgq, msgq); _edje_message_free(em); } + while (tmp_msgq) + { + Edje_Message *em; + + em = tmp_msgq->data; + tmp_msgq = evas_list_remove_list(tmp_msgq, tmp_msgq); + _edje_message_free(em); + } } void ------------------------------------------------------- This SF.Net email is sponsored by: YOU BE THE JUDGE. Be one of 170 Project Admins to receive an Apple iPod Mini FREE for your judgement on who ports your project to Linux PPC the best. Sponsored by IBM. Deadline: Sept. 13. Go here: http://sf.net/ppc_contest.php _______________________________________________ enlightenment-cvs mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs