summaryrefslogtreecommitdiff
path: root/tests/suite/ecore/src/lib/ecore_events.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/suite/ecore/src/lib/ecore_events.c')
-rw-r--r--tests/suite/ecore/src/lib/ecore_events.c879
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));
}