}
E_FREE(env);
+ if (e_input_thread_mode_get())
+ {
+ e_input_thread_run(input);
+ return EINA_TRUE;
+ }
+
if (e_input_thread_enabled_get())
{
/* initialize libinput udev backend within an ecore thread */
return EINA_TRUE;
}
+ if (!e_input_libinput_context_create(input))
+ goto err;
+
+ /* enable this input */
+ if (!e_input_enable_input(input))
+ {
+ ERR("Failed to enable input");
+ goto err;
+ }
+
+ /* append this input */
+ dev->inputs = eina_list_append(dev->inputs, input);
+
+ /* process pending events */
+ _input_events_process(input);
+
+ return EINA_TRUE;
+
+err:
+ if (input->libinput) libinput_unref(input->libinput);
+ free(input);
+
+ return EINA_FALSE;
+}
+
+EINTERN Eina_Bool
+e_input_libinput_context_create(E_Input_Backend *input)
+{
/* try to create libinput context */
input->libinput =
libinput_udev_create_context(&_input_interface, input, eeze_udev_get());
if (!input->libinput)
{
ERR("Could not create libinput context: %m");
- goto err;
+ return EINA_FALSE;
}
+ if (!input->dev)
+ return EINA_FALSE;
+
if (input->log_disable)
libinput_log_set_handler(input->libinput, NULL);
else
{
if (input->log_use_eina)
libinput_log_set_handler(input->libinput, _libinput_log_handler);
+
libinput_log_set_priority(input->libinput, LIBINPUT_LOG_PRIORITY_INFO);
}
/* assign udev seat */
TRACE_INPUT_BEGIN(libinput_udev_assign_seat);
- if (libinput_udev_assign_seat(input->libinput, dev->seat) != 0)
+ if (libinput_udev_assign_seat(input->libinput, input->dev->seat) != 0)
{
ERR("Failed to assign seat: %m");
TRACE_INPUT_END();
- goto err;
+ return EINA_FALSE;
}
TRACE_INPUT_END();
- /* enable this input */
- if (!e_input_enable_input(input))
- {
- ERR("Failed to enable input");
- goto err;
- }
-
- /* append this input */
- dev->inputs = eina_list_append(dev->inputs, input);
-
- /* process pending events */
- _input_events_process(input);
-
return EINA_TRUE;
-
-err:
- if (input->libinput) libinput_unref(input->libinput);
- free(input);
-
- return EINA_FALSE;
}
static void
static void
input_thread_start(void *data, Ecore_Thread *th)
{
+ E_Input_Device *dev;
E_Input_Backend *input;
GMainContext *context = NULL;
InputEventSource *input_event_source = NULL;
eina_thread_name_set(eina_thread_self(), "input-thread");
+ e_input_libinput_context_create(input);
+
+ /* enable this input */
+ if (!e_input_enable_input(input))
+ {
+ ERR("Failed to enable input");
+ return;
+ }
+
+ /* append this input */
+ dev = input->dev;
+ dev->inputs = eina_list_append(dev->inputs, input);
+
//create a context
context = g_main_context_new();
g_main_context_push_thread_default(context);
g_source_set_callback(&input_event_source->gsource, NULL, input, NULL);
g_source_attach(&input_event_source->gsource, context);
- input->enabled = EINA_TRUE;
- input->suspended = EINA_FALSE;
-
e_keyrouter_input_handler_add();
e_input_thread_id_set(gettid());
ecore_main_fd_handler_add(input->fd, ECORE_FD_READ,
_cb_input_dispatch, input, NULL, NULL);
}
+ }
- if (input->suspended)
- {
- if (libinput_resume(input->libinput) != 0)
- goto err;
-
- input->suspended = EINA_FALSE;
-
- /* process pending events */
- _input_events_process(input);
- }
+ if (input->suspended)
+ {
+ if (libinput_resume(input->libinput) != 0)
+ goto err;
- input->enabled = EINA_TRUE;
input->suspended = EINA_FALSE;
- }
- else
- {
- input->input_thread = ecore_thread_feedback_run(input_thread_start, input_thread_feedback, input_thread_end, input_thread_cancel, input, EINA_FALSE);
+
+ /* process pending events */
+ _input_events_process(input);
}
+ input->enabled = EINA_TRUE;
+ input->suspended = EINA_FALSE;
+
return EINA_TRUE;
err:
g_input_event_source = input->event_source;
}
+
+EINTERN void e_input_thread_run(E_Input_Backend *input)
+{
+ input->input_thread = ecore_thread_feedback_run(input_thread_start, input_thread_feedback, input_thread_end, input_thread_cancel, input, EINA_FALSE);
+}