diff options
author | Hosang Kim <hosang12.kim@samsung.com> | 2019-10-24 07:27:37 +0000 |
---|---|---|
committer | Cedric BAIL <cedric.bail@free.fr> | 2019-10-24 08:07:49 -0700 |
commit | b2ee3ad74872bcccaac00b718175f7dcedbd1589 (patch) | |
tree | 110efa1ce0fe3bf9035f18225555b6a3c4aacd3d | |
parent | b8ba39f4cb228ef16677f0db9dd7173f309beee4 (diff) | |
download | efl-b2ee3ad74872bcccaac00b718175f7dcedbd1589.tar.gz |
efl_message: add pending queue for filtering message.
Sometimes message is appended when message queue is walking.
In this case, newly added messages are not filtered.
So I add message pending queue for filtering message.
Reviewed-by: Cedric BAIL <cedric.bail@free.fr>
Differential Revision: https://phab.enlightenment.org/D10459
-rw-r--r-- | src/lib/ecore/ecore_private.h | 1 | ||||
-rw-r--r-- | src/lib/ecore/efl_loop.c | 8 | ||||
-rw-r--r-- | src/lib/ecore/efl_loop_message_handler.c | 12 |
3 files changed, 19 insertions, 2 deletions
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; |