more message queue calls

SVN revision: 11607
This commit is contained in:
Carsten Haitzler 2004-09-11 02:59:23 +00:00
parent 4648c06858
commit 674c783cdf
2 changed files with 75 additions and 9 deletions

View File

@ -193,10 +193,11 @@ extern "C" {
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
}

View File

@ -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)
{
@ -24,15 +27,58 @@ edje_object_message_handler_set(Evas_Object *obj, void (*func) (void *data, Evas
_edje_message_cb_set(ed, func, data);
}
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 @@ _edje_message_queue_process(void)
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 @@ _edje_message_queue_clear(void)
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