source->ev_handler_list = g_list_append(source->ev_handler_list, ie_data->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)
+static E_Input_Event_Handler *
+_e_input_event_handler_create(int event, ev_handler_func func, void *user_data, E_Input_Thread_Safe_Call_Cb input_thread_cb)
{
- if (!source) return NULL;
-
E_Input_Event_Handler *eh = (E_Input_Event_Handler *)calloc(1, sizeof(E_Input_Event_Handler));
if (!eh) return NULL;
ie_data.eh = eh;
INF("[%s] eh(%p)\n", __func__, eh);
- 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_input_backend_thread_safe_call(input_thread_cb, &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;
+
+ E_Input_Event_Handler *eh = _e_input_event_handler_create(event, func, user_data, _e_input_thread_event_handler_add);
+ if (!eh) return NULL;
+
source->ev_handler_list = g_list_append(source->ev_handler_list, eh);
return eh;
{
if (!source) return NULL;
- E_Input_Event_Handler *eh = (E_Input_Event_Handler *)calloc(1, sizeof(E_Input_Event_Handler));
+ E_Input_Event_Handler *eh = _e_input_event_handler_create(event, func, user_data, _e_input_thread_event_handler_prepend);
if (!eh) return NULL;
- eh->event = event;
- eh->func = func;
- eh->user_data = user_data;
-
- if (e_input_thread_id_get() != gettid())
- {
- E_Input_Thread_Request_Input_Event_Data ie_data;
- memset(&ie_data, 0, sizeof(E_Input_Thread_Request_Input_Event_Data));
-
- ie_data.eh = eh;
-
- INF("[%s] eh(%p)\n", __func__, eh);
- e_input_backend_thread_safe_call(_e_input_thread_event_handler_prepend, &ie_data, sizeof(E_Input_Thread_Request_Input_Event_Data));
-
- return eh;
- }
-
source->ev_handler_list = g_list_prepend(source->ev_handler_list, eh);
return eh;