diff options
Diffstat (limited to 'tests/suite/ecore/src/lib/ecore_events.c')
-rw-r--r-- | tests/suite/ecore/src/lib/ecore_events.c | 879 |
1 files changed, 458 insertions, 421 deletions
diff --git a/tests/suite/ecore/src/lib/ecore_events.c b/tests/suite/ecore/src/lib/ecore_events.c index 470838cb9a..ebe22219d3 100644 --- a/tests/suite/ecore/src/lib/ecore_events.c +++ b/tests/suite/ecore/src/lib/ecore_events.c @@ -1,5 +1,5 @@ #ifdef HAVE_CONFIG_H -# include <config.h> +#include <config.h> #endif #include <stdlib.h> @@ -9,40 +9,37 @@ static int inpurge = 0; -struct _Ecore_Event_Handler -{ - EINA_INLIST; - ECORE_MAGIC; - int type; - Ecore_Event_Handler_Cb func; - void *data; - int references; - Eina_Bool delete_me : 1; +struct _Ecore_Event_Handler { + EINA_INLIST; + ECORE_MAGIC; + int type; + Ecore_Event_Handler_Cb func; + void *data; + int references; + Eina_Bool delete_me:1; }; -struct _Ecore_Event_Filter -{ - EINA_INLIST; - ECORE_MAGIC; - Ecore_Data_Cb func_start; - Ecore_Filter_Cb func_filter; - Ecore_End_Cb func_end; - void *loop_data; - void *data; - int references; - Eina_Bool delete_me : 1; +struct _Ecore_Event_Filter { + EINA_INLIST; + ECORE_MAGIC; + Ecore_Data_Cb func_start; + Ecore_Filter_Cb func_filter; + Ecore_End_Cb func_end; + void *loop_data; + void *data; + int references; + Eina_Bool delete_me:1; }; -struct _Ecore_Event -{ - EINA_INLIST; - ECORE_MAGIC; - int type; - void *event; - Ecore_End_Cb func_free; - void *data; - int references; - Eina_Bool delete_me : 1; +struct _Ecore_Event { + EINA_INLIST; + ECORE_MAGIC; + int type; + void *event; + Ecore_End_Cb func_free; + void *data; + int references; + Eina_Bool delete_me:1; }; @@ -63,11 +60,11 @@ static Ecore_Event *event_filter_event_current = NULL; static int event_filters_delete_me = 0; static int event_id_max = ECORE_EVENT_COUNT; static int ecore_raw_event_type = ECORE_EVENT_NONE; -static void *ecore_raw_event_event = NULL; +static void *ecore_raw_event_event = NULL; static void _ecore_event_purge_deleted(void); -static void *_ecore_event_del(Ecore_Event *event); +static void *_ecore_event_del(Ecore_Event * event); /** @@ -93,44 +90,53 @@ static void *_ecore_event_del(Ecore_Event *event); * event, so all handler set to handle that event type that have not already * been called, will not be. */ -EAPI Ecore_Event_Handler * -ecore_event_handler_add(int type, Ecore_Event_Handler_Cb func, const void *data) +EAPI Ecore_Event_Handler *ecore_event_handler_add(int type, + Ecore_Event_Handler_Cb + func, const void *data) { - Ecore_Event_Handler *eh; - - if (!func) return NULL; - if ((type <= ECORE_EVENT_NONE) || (type >= event_id_max)) return NULL; - eh = calloc(1, sizeof(Ecore_Event_Handler)); - if (!eh) return NULL; - ECORE_MAGIC_SET(eh, ECORE_MAGIC_EVENT_HANDLER); - eh->type = type; - eh->func = func; - eh->data = (void *)data; - if (type >= (event_handlers_num - 1)) - { - int p_alloc_num; - - p_alloc_num = event_handlers_alloc_num; - event_handlers_num = type + 1; - if (event_handlers_num > event_handlers_alloc_num) - { - Ecore_Event_Handler **new_handlers; - int i; - - event_handlers_alloc_num = ((event_handlers_num + 16) / 16) * 16; - new_handlers = realloc(event_handlers, event_handlers_alloc_num * sizeof(Ecore_Event_Handler *)); - if (!new_handlers) - { - free(eh); - return NULL; - } - event_handlers = new_handlers; - for (i = p_alloc_num; i < event_handlers_alloc_num; i++) - event_handlers[i] = NULL; - } - } - event_handlers[type] = (Ecore_Event_Handler *) eina_inlist_append(EINA_INLIST_GET(event_handlers[type]), EINA_INLIST_GET(eh)); - return eh; + Ecore_Event_Handler *eh; + + if (!func) + return NULL; + if ((type <= ECORE_EVENT_NONE) || (type >= event_id_max)) + return NULL; + eh = calloc(1, sizeof(Ecore_Event_Handler)); + if (!eh) + return NULL; + ECORE_MAGIC_SET(eh, ECORE_MAGIC_EVENT_HANDLER); + eh->type = type; + eh->func = func; + eh->data = (void *) data; + if (type >= (event_handlers_num - 1)) { + int p_alloc_num; + + p_alloc_num = event_handlers_alloc_num; + event_handlers_num = type + 1; + if (event_handlers_num > event_handlers_alloc_num) { + Ecore_Event_Handler **new_handlers; + int i; + + event_handlers_alloc_num = + ((event_handlers_num + 16) / 16) * 16; + new_handlers = + realloc(event_handlers, + event_handlers_alloc_num * + sizeof(Ecore_Event_Handler *)); + if (!new_handlers) { + free(eh); + return NULL; + } + event_handlers = new_handlers; + for (i = p_alloc_num; i < event_handlers_alloc_num; + i++) + event_handlers[i] = NULL; + } + } + event_handlers[type] = + (Ecore_Event_Handler *) + eina_inlist_append(EINA_INLIST_GET(event_handlers[type]), + EINA_INLIST_GET(eh)); + return eh; } /** @@ -143,25 +149,23 @@ ecore_event_handler_add(int type, Ecore_Event_Handler_Cb func, const void *data) * handler was added by ecore_event_handler_add(). On failure NULL will be * returned. Once a handler is deleted it will no longer be called. */ -EAPI void * -ecore_event_handler_del(Ecore_Event_Handler *event_handler) +EAPI void *ecore_event_handler_del(Ecore_Event_Handler * event_handler) { - if (!ECORE_MAGIC_CHECK(event_handler, ECORE_MAGIC_EVENT_HANDLER)) - { - ECORE_MAGIC_FAIL(event_handler, ECORE_MAGIC_EVENT_HANDLER, - "ecore_event_handler_del"); - return NULL; - } - EINA_SAFETY_ON_TRUE_RETURN_VAL(event_handler->delete_me, NULL); - event_handler->delete_me = 1; - event_handlers_delete_list = eina_list_append(event_handlers_delete_list, event_handler); - return event_handler->data; + if (!ECORE_MAGIC_CHECK(event_handler, ECORE_MAGIC_EVENT_HANDLER)) { + ECORE_MAGIC_FAIL(event_handler, ECORE_MAGIC_EVENT_HANDLER, + "ecore_event_handler_del"); + return NULL; + } + EINA_SAFETY_ON_TRUE_RETURN_VAL(event_handler->delete_me, NULL); + event_handler->delete_me = 1; + event_handlers_delete_list = + eina_list_append(event_handlers_delete_list, event_handler); + return event_handler->data; } -static void -_ecore_event_generic_free (void *data __UNUSED__, void *event) +static void _ecore_event_generic_free(void *data __UNUSED__, void *event) { - free (event); + free(event); } /** @@ -182,14 +186,17 @@ _ecore_event_generic_free (void *data __UNUSED__, void *event) * with the private structure pointer. * func_free is passed @p data as its data parameter. */ -EAPI Ecore_Event * -ecore_event_add(int type, void *ev, Ecore_End_Cb func_free, void *data) +EAPI Ecore_Event *ecore_event_add(int type, void *ev, + Ecore_End_Cb func_free, void *data) { /* if (!ev) return NULL;*/ - if (type <= ECORE_EVENT_NONE) return NULL; - if (type >= event_id_max) return NULL; - if ((ev) && (!func_free)) func_free = _ecore_event_generic_free; - return _ecore_event_add(type, ev, func_free, data); + if (type <= ECORE_EVENT_NONE) + return NULL; + if (type >= event_id_max) + return NULL; + if ((ev) && (!func_free)) + func_free = _ecore_event_generic_free; + return _ecore_event_add(type, ev, func_free, data); } /** @@ -203,17 +210,16 @@ ecore_event_add(int type, void *ev, Ecore_End_Cb func_free, void *data) * cleanup, and so if the free function depends on the data pointer to work, * you should defer cleaning of this till the free function is called later. */ -EAPI void * -ecore_event_del(Ecore_Event *event) +EAPI void *ecore_event_del(Ecore_Event * event) { - if (!ECORE_MAGIC_CHECK(event, ECORE_MAGIC_EVENT)) - { - ECORE_MAGIC_FAIL(event, ECORE_MAGIC_EVENT, "ecore_event_del"); - return NULL; - } - EINA_SAFETY_ON_TRUE_RETURN_VAL(event->delete_me, NULL); - event->delete_me = 1; - return event->data; + if (!ECORE_MAGIC_CHECK(event, ECORE_MAGIC_EVENT)) { + ECORE_MAGIC_FAIL(event, ECORE_MAGIC_EVENT, + "ecore_event_del"); + return NULL; + } + EINA_SAFETY_ON_TRUE_RETURN_VAL(event->delete_me, NULL); + event->delete_me = 1; + return event->data; } /** @@ -226,11 +232,10 @@ ecore_event_del(Ecore_Event *event) * it is calculated, except that the ID will be unique to the current instance * of the process. */ -EAPI int -ecore_event_type_new(void) +EAPI int ecore_event_type_new(void) { - event_id_max++; - return event_id_max - 1; + event_id_max++; + return event_id_max - 1; } /** @@ -253,21 +258,29 @@ ecore_event_type_new(void) * processing is finished @p func_end is called and is passed the loop_data * and @p data pointer to clean up. */ -EAPI Ecore_Event_Filter * -ecore_event_filter_add(Ecore_Data_Cb func_start, Ecore_Filter_Cb func_filter, Ecore_End_Cb func_end, const void *data) +EAPI Ecore_Event_Filter *ecore_event_filter_add(Ecore_Data_Cb func_start, + Ecore_Filter_Cb + func_filter, + Ecore_End_Cb func_end, + const void *data) { - Ecore_Event_Filter *ef; - - if (!func_filter) return NULL; - ef = calloc(1, sizeof(Ecore_Event_Filter)); - if (!ef) return NULL; - ECORE_MAGIC_SET(ef, ECORE_MAGIC_EVENT_FILTER); - ef->func_start = func_start; - ef->func_filter = func_filter; - ef->func_end = func_end; - ef->data = (void *)data; - event_filters = (Ecore_Event_Filter *) eina_inlist_append(EINA_INLIST_GET(event_filters), EINA_INLIST_GET(ef)); - return ef; + Ecore_Event_Filter *ef; + + if (!func_filter) + return NULL; + ef = calloc(1, sizeof(Ecore_Event_Filter)); + if (!ef) + return NULL; + ECORE_MAGIC_SET(ef, ECORE_MAGIC_EVENT_FILTER); + ef->func_start = func_start; + ef->func_filter = func_filter; + ef->func_end = func_end; + ef->data = (void *) data; + event_filters = + (Ecore_Event_Filter *) + eina_inlist_append(EINA_INLIST_GET(event_filters), + EINA_INLIST_GET(ef)); + return ef; } /** @@ -279,18 +292,17 @@ ecore_event_filter_add(Ecore_Data_Cb func_start, Ecore_Filter_Cb func_filter, Ec * will return the data pointer set when this filter was added. On failure * NULL is returned. */ -EAPI void * -ecore_event_filter_del(Ecore_Event_Filter *ef) +EAPI void *ecore_event_filter_del(Ecore_Event_Filter * ef) { - if (!ECORE_MAGIC_CHECK(ef, ECORE_MAGIC_EVENT_FILTER)) - { - ECORE_MAGIC_FAIL(ef, ECORE_MAGIC_EVENT_FILTER, "ecore_event_filter_del"); - return NULL; - } - EINA_SAFETY_ON_TRUE_RETURN_VAL(ef->delete_me, NULL); - ef->delete_me = 1; - event_filters_delete_me = 1; - return ef->data; + if (!ECORE_MAGIC_CHECK(ef, ECORE_MAGIC_EVENT_FILTER)) { + ECORE_MAGIC_FAIL(ef, ECORE_MAGIC_EVENT_FILTER, + "ecore_event_filter_del"); + return NULL; + } + EINA_SAFETY_ON_TRUE_RETURN_VAL(ef->delete_me, NULL); + ef->delete_me = 1; + event_filters_delete_me = 1; + return ef->data; } /** @@ -307,10 +319,9 @@ ecore_event_filter_del(Ecore_Event_Filter *ef) * the program know if the event type being handled is one it wants to get more * information about. */ -EAPI int -ecore_event_current_type_get(void) +EAPI int ecore_event_current_type_get(void) { - return ecore_raw_event_type; + return ecore_raw_event_type; } /** @@ -327,333 +338,359 @@ ecore_event_current_type_get(void) * the program access the event data if the type of the event is handled by * the program. */ -EAPI void * -ecore_event_current_event_get(void) +EAPI void *ecore_event_current_event_get(void) { - return ecore_raw_event_event; + return ecore_raw_event_event; } -void -_ecore_event_shutdown(void) +void _ecore_event_shutdown(void) { - int i; - Ecore_Event_Handler *eh; - Ecore_Event_Filter *ef; - - while (events) _ecore_event_del(events); - event_current = NULL; - for (i = 0; i < event_handlers_num; i++) - { - while ((eh = event_handlers[i])) - { - event_handlers[i] = (Ecore_Event_Handler *) eina_inlist_remove(EINA_INLIST_GET(event_handlers[i]), EINA_INLIST_GET(event_handlers[i])); - ECORE_MAGIC_SET(eh, ECORE_MAGIC_NONE); - if (!eh->delete_me) free(eh); - } - } - EINA_LIST_FREE(event_handlers_delete_list, eh) - free(eh); - if (event_handlers) free(event_handlers); - event_handlers = NULL; - event_handlers_num = 0; - event_handlers_alloc_num = 0; - while ((ef = event_filters)) - { - event_filters = (Ecore_Event_Filter *) eina_inlist_remove(EINA_INLIST_GET(event_filters), EINA_INLIST_GET(event_filters)); - ECORE_MAGIC_SET(ef, ECORE_MAGIC_NONE); - free(ef); - } - event_filters_delete_me = 0; - event_filter_current = NULL; - event_filter_event_current = NULL; + int i; + Ecore_Event_Handler *eh; + Ecore_Event_Filter *ef; + + while (events) + _ecore_event_del(events); + event_current = NULL; + for (i = 0; i < event_handlers_num; i++) { + while ((eh = event_handlers[i])) { + event_handlers[i] = + (Ecore_Event_Handler *) + eina_inlist_remove(EINA_INLIST_GET + (event_handlers[i]), + EINA_INLIST_GET + (event_handlers[i])); + ECORE_MAGIC_SET(eh, ECORE_MAGIC_NONE); + if (!eh->delete_me) + free(eh); + } + } + EINA_LIST_FREE(event_handlers_delete_list, eh) + free(eh); + if (event_handlers) + free(event_handlers); + event_handlers = NULL; + event_handlers_num = 0; + event_handlers_alloc_num = 0; + while ((ef = event_filters)) { + event_filters = + (Ecore_Event_Filter *) + eina_inlist_remove(EINA_INLIST_GET(event_filters), + EINA_INLIST_GET(event_filters)); + ECORE_MAGIC_SET(ef, ECORE_MAGIC_NONE); + free(ef); + } + event_filters_delete_me = 0; + event_filter_current = NULL; + event_filter_event_current = NULL; } -int -_ecore_event_exist(void) +int _ecore_event_exist(void) { - Ecore_Event *e; - EINA_INLIST_FOREACH(events, e) - if (!e->delete_me) return 1; - return 0; + Ecore_Event *e; + EINA_INLIST_FOREACH(events, e) + if (!e->delete_me) + return 1; + return 0; } -Ecore_Event * -_ecore_event_add(int type, void *ev, Ecore_End_Cb func_free, void *data) +Ecore_Event *_ecore_event_add(int type, void *ev, Ecore_End_Cb func_free, + void *data) { - Ecore_Event *e; - - e = calloc(1, sizeof(Ecore_Event)); - if (!e) return NULL; - ECORE_MAGIC_SET(e, ECORE_MAGIC_EVENT); - e->type = type; - e->event = ev; - e->func_free = func_free; - e->data = data; - if (inpurge > 0) - { - purge_events = (Ecore_Event *)eina_inlist_append(EINA_INLIST_GET(purge_events), EINA_INLIST_GET(e)); - events_num++; - } - else - { - events = (Ecore_Event *)eina_inlist_append(EINA_INLIST_GET(events), EINA_INLIST_GET(e)); - events_num++; - } - return e; + Ecore_Event *e; + + e = calloc(1, sizeof(Ecore_Event)); + if (!e) + return NULL; + ECORE_MAGIC_SET(e, ECORE_MAGIC_EVENT); + e->type = type; + e->event = ev; + e->func_free = func_free; + e->data = data; + if (inpurge > 0) { + purge_events = + (Ecore_Event *) + eina_inlist_append(EINA_INLIST_GET(purge_events), + EINA_INLIST_GET(e)); + events_num++; + } else { + events = + (Ecore_Event *) + eina_inlist_append(EINA_INLIST_GET(events), + EINA_INLIST_GET(e)); + events_num++; + } + return e; } -void * -_ecore_event_del(Ecore_Event *event) +void *_ecore_event_del(Ecore_Event * event) { - void *data; - - data = event->data; - if (event->func_free) event->func_free(event->data, event->event); - events = (Ecore_Event *) eina_inlist_remove(EINA_INLIST_GET(events), EINA_INLIST_GET(event)); - ECORE_MAGIC_SET(event, ECORE_MAGIC_NONE); - free(event); - events_num--; - return data; + void *data; + + data = event->data; + if (event->func_free) + event->func_free(event->data, event->event); + events = + (Ecore_Event *) eina_inlist_remove(EINA_INLIST_GET(events), + EINA_INLIST_GET(event)); + ECORE_MAGIC_SET(event, ECORE_MAGIC_NONE); + free(event); + events_num--; + return data; } -static void -_ecore_event_purge_deleted(void) +static void _ecore_event_purge_deleted(void) { - Ecore_Event *itr = events; - - inpurge++; - while (itr) - { - Ecore_Event *next = (Ecore_Event *)EINA_INLIST_GET(itr)->next; - if ((!itr->references) && (itr->delete_me)) - _ecore_event_del(itr); - itr = next; - } - inpurge--; - while (purge_events) - { - Ecore_Event *e = purge_events; - purge_events = (Ecore_Event *)eina_inlist_remove(EINA_INLIST_GET(purge_events), EINA_INLIST_GET(purge_events)); - events = (Ecore_Event *)eina_inlist_append(EINA_INLIST_GET(events), EINA_INLIST_GET(e)); - } + Ecore_Event *itr = events; + + inpurge++; + while (itr) { + Ecore_Event *next = + (Ecore_Event *) EINA_INLIST_GET(itr)->next; + if ((!itr->references) && (itr->delete_me)) + _ecore_event_del(itr); + itr = next; + } + inpurge--; + while (purge_events) { + Ecore_Event *e = purge_events; + purge_events = + (Ecore_Event *) + eina_inlist_remove(EINA_INLIST_GET(purge_events), + EINA_INLIST_GET(purge_events)); + events = + (Ecore_Event *) + eina_inlist_append(EINA_INLIST_GET(events), + EINA_INLIST_GET(e)); + } } -static inline void -_ecore_event_filters_apply() +static inline void _ecore_event_filters_apply() { - if (!event_filter_current) - { - /* regular main loop, start from head */ - event_filter_current = event_filters; - } - else - { - /* recursive main loop, continue from where we were */ - event_filter_current = (Ecore_Event_Filter *)EINA_INLIST_GET(event_filter_current)->next; - } - - while (event_filter_current) - { - Ecore_Event_Filter *ef = event_filter_current; - - if (!ef->delete_me) - { - ef->references++; - - if (ef->func_start) - ef->loop_data = ef->func_start(ef->data); - - if (!event_filter_event_current) - { - /* regular main loop, start from head */ - event_filter_event_current = events; - } - else - { - /* recursive main loop, continue from where we were */ - event_filter_event_current = (Ecore_Event *)EINA_INLIST_GET(event_filter_event_current)->next; - } - - while (event_filter_event_current) - { - Ecore_Event *e = event_filter_event_current; - - if (!ef->func_filter(ef->data, ef->loop_data, - e->type, e->event)) - { - ecore_event_del(e); - } - - if (event_filter_event_current) /* may have changed in recursive main loops */ - event_filter_event_current = (Ecore_Event *)EINA_INLIST_GET(event_filter_event_current)->next; - } - if (ef->func_end) - ef->func_end(ef->data, ef->loop_data); - - ef->references--; - } - - if (event_filter_current) /* may have changed in recursive main loops */ - event_filter_current = (Ecore_Event_Filter *)EINA_INLIST_GET(event_filter_current)->next; - } - if (event_filters_delete_me) - { - int deleted_in_use = 0; - Ecore_Event_Filter *l; - for (l = event_filters; l;) - { - Ecore_Event_Filter *ef = l; - l = (Ecore_Event_Filter *) EINA_INLIST_GET(l)->next; - if (ef->delete_me) - { - if (ef->references) - { - deleted_in_use++; - continue; - } - - event_filters = (Ecore_Event_Filter *) eina_inlist_remove(EINA_INLIST_GET(event_filters), EINA_INLIST_GET(ef)); - ECORE_MAGIC_SET(ef, ECORE_MAGIC_NONE); - free(ef); - } - } - if (!deleted_in_use) - event_filters_delete_me = 0; - } + if (!event_filter_current) { + /* regular main loop, start from head */ + event_filter_current = event_filters; + } else { + /* recursive main loop, continue from where we were */ + event_filter_current = + (Ecore_Event_Filter *) + EINA_INLIST_GET(event_filter_current)->next; + } + + while (event_filter_current) { + Ecore_Event_Filter *ef = event_filter_current; + + if (!ef->delete_me) { + ef->references++; + + if (ef->func_start) + ef->loop_data = ef->func_start(ef->data); + + if (!event_filter_event_current) { + /* regular main loop, start from head */ + event_filter_event_current = events; + } else { + /* recursive main loop, continue from where we were */ + event_filter_event_current = + (Ecore_Event *) + EINA_INLIST_GET + (event_filter_event_current)->next; + } + + while (event_filter_event_current) { + Ecore_Event *e = + event_filter_event_current; + + if (!ef-> + func_filter(ef->data, ef->loop_data, + e->type, e->event)) { + ecore_event_del(e); + } + + if (event_filter_event_current) /* may have changed in recursive main loops */ + event_filter_event_current = + (Ecore_Event *) + EINA_INLIST_GET + (event_filter_event_current)-> + next; + } + if (ef->func_end) + ef->func_end(ef->data, ef->loop_data); + + ef->references--; + } + + if (event_filter_current) /* may have changed in recursive main loops */ + event_filter_current = + (Ecore_Event_Filter *) + EINA_INLIST_GET(event_filter_current)->next; + } + if (event_filters_delete_me) { + int deleted_in_use = 0; + Ecore_Event_Filter *l; + for (l = event_filters; l;) { + Ecore_Event_Filter *ef = l; + l = (Ecore_Event_Filter *) EINA_INLIST_GET(l)-> + next; + if (ef->delete_me) { + if (ef->references) { + deleted_in_use++; + continue; + } + + event_filters = + (Ecore_Event_Filter *) + eina_inlist_remove(EINA_INLIST_GET + (event_filters), + EINA_INLIST_GET + (ef)); + ECORE_MAGIC_SET(ef, ECORE_MAGIC_NONE); + free(ef); + } + } + if (!deleted_in_use) + event_filters_delete_me = 0; + } } -void -_ecore_event_call(void) + +void _ecore_event_call(void) { - Eina_List *l, *l_next; - Ecore_Event_Handler *eh; - - _ecore_event_filters_apply(); - - if (!event_current) - { - /* regular main loop, start from head */ - event_current = events; - event_handler_current = NULL; - } - - while (event_current) - { - Ecore_Event *e = event_current; - int handle_count = 0; - - if (e->delete_me) - { - event_current = (Ecore_Event *)EINA_INLIST_GET(event_current)->next; - continue; - } - - ecore_raw_event_type = e->type; - ecore_raw_event_event = e->event; - e->references++; - if ((e->type >= 0) && (e->type < event_handlers_num)) - { - if (!event_handler_current) - { - /* regular main loop, start from head */ - event_handler_current = event_handlers[e->type]; - } - else - { - /* recursive main loop, continue from where we were */ - event_handler_current = (Ecore_Event_Handler *)EINA_INLIST_GET(event_handler_current)->next; - } - - while ((event_handler_current) && (!e->delete_me)) - { - Ecore_Event_Handler *eh = event_handler_current; - if (!eh->delete_me) - { - Eina_Bool ret; - - handle_count++; - - eh->references++; - ret = eh->func(eh->data, e->type, e->event); - eh->references--; - - if (!ret) - { - event_handler_current = NULL; - break; /* 0 == "call no further handlers" */ - } - } - - if (event_handler_current) /* may have changed in recursive main loops */ - event_handler_current = (Ecore_Event_Handler *)EINA_INLIST_GET(event_handler_current)->next; - } - } - /* if no handlers were set for EXIT signal - then default is */ - /* to quit the main loop */ - if ((e->type == ECORE_EVENT_SIGNAL_EXIT) && (handle_count == 0)) - ecore_main_loop_quit(); - e->references--; - e->delete_me = 1; - - if (event_current) /* may have changed in recursive main loops */ - event_current = (Ecore_Event *)EINA_INLIST_GET(event_current)->next; - } - - ecore_raw_event_type = ECORE_EVENT_NONE; - ecore_raw_event_event = NULL; - - _ecore_event_purge_deleted(); - - EINA_LIST_FOREACH_SAFE(event_handlers_delete_list, l, l_next, eh) - { - if (eh->references) continue; - - event_handlers_delete_list = eina_list_remove_list(event_handlers_delete_list, l); - - event_handlers[eh->type] = (Ecore_Event_Handler *) eina_inlist_remove(EINA_INLIST_GET(event_handlers[eh->type]), EINA_INLIST_GET(eh)); - ECORE_MAGIC_SET(eh, ECORE_MAGIC_NONE); - free(eh); - } + Eina_List *l, *l_next; + Ecore_Event_Handler *eh; + + _ecore_event_filters_apply(); + + if (!event_current) { + /* regular main loop, start from head */ + event_current = events; + event_handler_current = NULL; + } + + while (event_current) { + Ecore_Event *e = event_current; + int handle_count = 0; + + if (e->delete_me) { + event_current = + (Ecore_Event *) + EINA_INLIST_GET(event_current)->next; + continue; + } + + ecore_raw_event_type = e->type; + ecore_raw_event_event = e->event; + e->references++; + if ((e->type >= 0) && (e->type < event_handlers_num)) { + if (!event_handler_current) { + /* regular main loop, start from head */ + event_handler_current = + event_handlers[e->type]; + } else { + /* recursive main loop, continue from where we were */ + event_handler_current = + (Ecore_Event_Handler *) + EINA_INLIST_GET + (event_handler_current)->next; + } + + while ((event_handler_current) && (!e->delete_me)) { + Ecore_Event_Handler *eh = + event_handler_current; + if (!eh->delete_me) { + Eina_Bool ret; + + handle_count++; + + eh->references++; + ret = + eh->func(eh->data, e->type, + e->event); + eh->references--; + + if (!ret) { + event_handler_current = + NULL; + break; /* 0 == "call no further handlers" */ + } + } + + if (event_handler_current) /* may have changed in recursive main loops */ + event_handler_current = + (Ecore_Event_Handler *) + EINA_INLIST_GET + (event_handler_current)->next; + } + } + /* if no handlers were set for EXIT signal - then default is */ + /* to quit the main loop */ + if ((e->type == ECORE_EVENT_SIGNAL_EXIT) + && (handle_count == 0)) + ecore_main_loop_quit(); + e->references--; + e->delete_me = 1; + + if (event_current) /* may have changed in recursive main loops */ + event_current = + (Ecore_Event *) + EINA_INLIST_GET(event_current)->next; + } + + ecore_raw_event_type = ECORE_EVENT_NONE; + ecore_raw_event_event = NULL; + + _ecore_event_purge_deleted(); + + EINA_LIST_FOREACH_SAFE(event_handlers_delete_list, l, l_next, eh) { + if (eh->references) + continue; + + event_handlers_delete_list = + eina_list_remove_list(event_handlers_delete_list, l); + + event_handlers[eh->type] = + (Ecore_Event_Handler *) + eina_inlist_remove(EINA_INLIST_GET + (event_handlers[eh->type]), + EINA_INLIST_GET(eh)); + ECORE_MAGIC_SET(eh, ECORE_MAGIC_NONE); + free(eh); + } } -EAPI void * -_ecore_event_signal_user_new(void) +EAPI void *_ecore_event_signal_user_new(void) { - Ecore_Event_Signal_User *e; + Ecore_Event_Signal_User *e; - e = calloc(1, sizeof(Ecore_Event_Signal_User)); - return e; + e = calloc(1, sizeof(Ecore_Event_Signal_User)); + return e; } -void * -_ecore_event_signal_hup_new(void) +void *_ecore_event_signal_hup_new(void) { - Ecore_Event_Signal_Hup *e; + Ecore_Event_Signal_Hup *e; - e = calloc(1, sizeof(Ecore_Event_Signal_Hup)); - return e; + e = calloc(1, sizeof(Ecore_Event_Signal_Hup)); + return e; } -void * -_ecore_event_signal_exit_new(void) +void *_ecore_event_signal_exit_new(void) { - Ecore_Event_Signal_Exit *e; + Ecore_Event_Signal_Exit *e; - e = calloc(1, sizeof(Ecore_Event_Signal_Exit)); - return e; + e = calloc(1, sizeof(Ecore_Event_Signal_Exit)); + return e; } -void * -_ecore_event_signal_power_new(void) +void *_ecore_event_signal_power_new(void) { - Ecore_Event_Signal_Power *e; + Ecore_Event_Signal_Power *e; - e = calloc(1, sizeof(Ecore_Event_Signal_Power)); - return e; + e = calloc(1, sizeof(Ecore_Event_Signal_Power)); + return e; } -void * -_ecore_event_signal_realtime_new(void) +void *_ecore_event_signal_realtime_new(void) { - return calloc(1, sizeof(Ecore_Event_Signal_Realtime)); + return calloc(1, sizeof(Ecore_Event_Signal_Realtime)); } |