EINA_SAFETY_ON_NULL_RETURN(source);
INF("[input thread|%s] eh(%p)\n", __func__, ie_data->eh);
- source->ev_handler_list = g_list_append(source->ev_handler_list, ie_data->eh);
+
+ if (ie_data->append)
+ source->ev_handler_list = g_list_append(source->ev_handler_list, ie_data->eh);
+ else
+ source->ev_handler_list = g_list_prepend(source->ev_handler_list, ie_data->eh);
}
static E_Input_Event_Handler *
-_e_input_event_handler_create(E_Input_Event_Source *source, int event, ev_handler_func func, void *user_data, E_Input_Thread_Safe_Call_Cb input_thread_cb, Eina_Bool append)
+_e_input_event_handler_create(E_Input_Event_Source *source, int event, ev_handler_func func, void *user_data, Eina_Bool append)
{
- E_Input_Event_Handler *eh = (E_Input_Event_Handler *)calloc(1, sizeof(E_Input_Event_Handler));
+ E_Input_Event_Handler *eh = NULL;
+ if (!source) return NULL;
+
+ eh = (E_Input_Event_Handler *)calloc(1, sizeof(E_Input_Event_Handler));
+
if (!eh) return NULL;
eh->event = event;
memset(&ie_data, 0, sizeof(E_Input_Thread_Request_Input_Event_Data));
ie_data.eh = eh;
+ ie_data.append = append;
INF("[%s] eh(%p)\n", __func__, eh);
- e_input_backend_thread_safe_call(input_thread_cb, &ie_data, sizeof(E_Input_Thread_Request_Input_Event_Data));
+ e_input_backend_thread_safe_call(_e_input_thread_event_handler_add, &ie_data, sizeof(E_Input_Thread_Request_Input_Event_Data));
return eh;
}
E_API E_Input_Event_Handler *
e_input_event_handler_add(E_Input_Event_Source *source, int event, ev_handler_func func, void *user_data)
{
- if (!source) return NULL;
-
- return _e_input_event_handler_create(source, event, func, user_data, _e_input_thread_event_handler_add, EINA_TRUE);
-}
-
-static void
-_e_input_thread_event_handler_prepend(void *data)
-{
- E_Input_Thread_Request_Input_Event_Data *ie_data = data;
- E_Input_Event_Source *source = e_input_event_source_get();
-
- EINA_SAFETY_ON_NULL_RETURN(ie_data);
- EINA_SAFETY_ON_NULL_RETURN(source);
-
- INF("[input thread|%s] eh(%p)\n", __func__, ie_data->eh);
- source->ev_handler_list = g_list_prepend(source->ev_handler_list, ie_data->eh);
+ return _e_input_event_handler_create(source, event, func, user_data, EINA_TRUE);
}
E_API E_Input_Event_Handler *
e_input_event_handler_prepend(E_Input_Event_Source *source, int event, ev_handler_func func, void *user_data)
{
- if (!source) return NULL;
-
- return _e_input_event_handler_create(source, event, func, user_data, _e_input_thread_event_handler_prepend, EINA_FALSE);
+ return _e_input_event_handler_create(source, event, func, user_data, EINA_FALSE);
}
static void