summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHosang Kim <hosang12.kim@samsung.com>2019-10-24 07:27:37 +0000
committerCedric BAIL <cedric.bail@free.fr>2019-10-24 08:07:49 -0700
commitb2ee3ad74872bcccaac00b718175f7dcedbd1589 (patch)
tree110efa1ce0fe3bf9035f18225555b6a3c4aacd3d
parentb8ba39f4cb228ef16677f0db9dd7173f309beee4 (diff)
downloadefl-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.h1
-rw-r--r--src/lib/ecore/efl_loop.c8
-rw-r--r--src/lib/ecore/efl_loop_message_handler.c12
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;