diff --git a/src/lib/ecore/ecore_private.h b/src/lib/ecore/ecore_private.h index de3b47b60c..f56cbae30a 100644 --- a/src/lib/ecore/ecore_private.h +++ b/src/lib/ecore/ecore_private.h @@ -147,6 +147,7 @@ struct _Efl_Loop_Data Eina_List *thread_children; Eina_Inlist *message_queue; + Eina_Inlist *message_pending_queue; unsigned int message_walking; unsigned int throttle; diff --git a/src/lib/ecore/efl_loop.c b/src/lib/ecore/efl_loop.c index e40dbef3f0..9a36d74658 100644 --- a/src/lib/ecore/efl_loop.c +++ b/src/lib/ecore/efl_loop.c @@ -621,6 +621,14 @@ _efl_loop_message_process(Eo *obj, Efl_Loop_Data *pd) } else free(msg); } + + while (pd->message_pending_queue) + { + msg = (Message *)pd->message_pending_queue; + pd->message_pending_queue = eina_inlist_remove(pd->message_pending_queue, + pd->message_pending_queue); + pd->message_queue = eina_inlist_append(pd->message_queue, EINA_INLIST_GET(msg)); + } } return EINA_TRUE; } diff --git a/src/lib/ecore/efl_loop_message_handler.c b/src/lib/ecore/efl_loop_message_handler.c index 05ecdbcab2..e243c1713e 100644 --- a/src/lib/ecore/efl_loop_message_handler.c +++ b/src/lib/ecore/efl_loop_message_handler.c @@ -54,8 +54,16 @@ _efl_loop_message_handler_message_send(Eo *obj, Efl_Loop_Message_Handler_Data *p { msg->handler = obj; msg->message = message; - pd->loop_data->message_queue = eina_inlist_append - (pd->loop_data->message_queue, EINA_INLIST_GET(msg)); + if (pd->loop_data->message_walking > 0) + { + pd->loop_data->message_pending_queue = eina_inlist_append + (pd->loop_data->message_pending_queue, EINA_INLIST_GET(msg)); + } + else + { + pd->loop_data->message_queue = eina_inlist_append + (pd->loop_data->message_queue, EINA_INLIST_GET(msg)); + } _efl_loop_message_send_info_set(message, EINA_INLIST_GET(msg), pd->loop, pd->loop_data); return;