efl_loop: remove message_handler_get

it appears that this could be emulated with other functions. Plus the
function had the limitation, that no constructors could be used.

ref T7597

Reviewed-by: Cedric BAIL <cedric.bail@free.fr>
Differential Revision: https://phab.enlightenment.org/D7985
This commit is contained in:
Marcel Hollerbach 2019-02-21 18:56:00 +01:00
parent a9f6e7ac42
commit cc9f236a29
5 changed files with 11 additions and 51 deletions

View File

@ -86,10 +86,12 @@ _ecore_event_filters_call(Eo *obj, Efl_Loop_Data *pd)
{
Filter *f;
Ecore_Event_Message_Handler_Data *eemhd;
Eo *ecore_event_handler = efl_loop_message_handler_get
(obj, ECORE_EVENT_MESSAGE_HANDLER_CLASS);
Eo *ecore_event_handler = efl_provider_find(obj, ECORE_EVENT_MESSAGE_HANDLER_CLASS);
/* If this is not != NULL, then _ecore_event_init was not called yet, which means,
there cannot be any registered events yet
*/
if (!ecore_event_handler) return;
eemhd = efl_data_scope_get(ecore_event_handler, MY_CLASS);
if (!eemhd) return;
if (!eemhd->filters) return;

View File

@ -245,9 +245,9 @@ _ecore_event_init(void)
const char *choice = getenv("EINA_MEMPOOL");
if ((!choice) || (!choice[0])) choice = "chained_mempool";
_event_msg_handler =
efl_loop_message_handler_get(_mainloop_singleton,
ECORE_EVENT_MESSAGE_HANDLER_CLASS);
_event_msg_handler = efl_add(ECORE_EVENT_MESSAGE_HANDLER_CLASS, _mainloop_singleton);
efl_loop_register(_mainloop_singleton, ECORE_EVENT_MESSAGE_HANDLER_CLASS, _event_msg_handler);
if (!_event_msg_handler)
{
ERR("Cannot create legacy ecore event message handler");

View File

@ -94,15 +94,8 @@ typedef struct _Efl_Loop_Data Efl_Loop_Data;
typedef struct _Efl_Task_Data Efl_Task_Data;
typedef struct _Efl_Appthread_Data Efl_Appthread_Data;
typedef struct _Message_Handler Message_Handler;
typedef struct _Message Message;
struct _Message_Handler
{
Eo *handler;
const Eo *klass;
};
struct _Message
{
EINA_INLIST;
@ -150,7 +143,6 @@ struct _Efl_Loop_Data
Eina_List *win32_handlers_to_delete;
# endif
Eina_Inarray *message_handlers;
Eina_Inlist *message_queue;
unsigned int message_walking;

View File

@ -30,24 +30,6 @@ struct _Efl_Loop_Promise_Simple_Data
};
GENERIC_ALLOC_SIZE_DECLARE(Efl_Loop_Promise_Simple_Data);
EOLIAN static Efl_Loop_Message_Handler *
_efl_loop_message_handler_get(Eo *obj, Efl_Loop_Data *pd EINA_UNUSED, const Efl_Class *klass)
{
Message_Handler mh = { 0 }, *mh2;
unsigned int i, n;
n = eina_inarray_count(pd->message_handlers);
for (i = 0; i < n; i++)
{
mh2 = eina_inarray_nth(pd->message_handlers, i);
if (mh2->klass == klass) return mh2->handler;
}
mh.klass = klass;
mh.handler = efl_add(klass, obj);
eina_inarray_push(pd->message_handlers, &mh);
return mh.handler;
}
Eo *_mainloop_singleton = NULL;
Efl_Loop_Data *_mainloop_singleton_data = NULL;
@ -305,11 +287,11 @@ _efl_loop_efl_object_constructor(Eo *obj, Efl_Loop_Data *pd)
pd->loop_time = ecore_time_get();
pd->providers = eina_hash_pointer_new(EINA_FREE_CB(efl_unref));
pd->message_handlers = eina_inarray_new(sizeof(Message_Handler), 32);
pd->epoll_fd = -1;
pd->timer_fd = -1;
pd->future_message_handler = efl_loop_message_handler_get
(obj, EFL_LOOP_MESSAGE_FUTURE_HANDLER_CLASS);
pd->future_message_handler = efl_add(EFL_LOOP_MESSAGE_FUTURE_HANDLER_CLASS, obj);
efl_loop_register(obj, EFL_LOOP_MESSAGE_FUTURE_HANDLER_CLASS, pd->future_message_handler);
return obj;
}
@ -328,12 +310,6 @@ _efl_loop_efl_object_invalidate(Eo *obj, Efl_Loop_Data *pd)
pd->poll_medium = NULL;
pd->poll_high = NULL;
if (pd->message_handlers)
{
eina_inarray_free(pd->message_handlers);
pd->message_handlers = NULL;
}
// After invalidate, it won't be possible to parent to the singleton anymore
if (obj == _mainloop_singleton)
{

View File

@ -113,16 +113,6 @@ abstract @beta Efl.Loop extends Efl.Task
}
return: bool; [[$true if successfully unregistered, $false otherwise.]]
}
message_handler_get {
[[Get a message handler object that is created by and owned by
the Efl.Loop object, so you can listen to this message type by
listening to message events on the handler as well as send
objects as events.]]
params {
@in klass: const(Efl.Class); [[The class of the message object.]]
}
return: Efl.Loop_Message_Handler; [[The message handler to use.]]
}
}
events {
idle,enter @restart: void; [[Event occurs once the main loop enters the idle state.]]