e_info: Modified to generate input event in input thread 26/317726/1
authorInhong Han <inhong1.han@samsung.com>
Wed, 11 Sep 2024 05:49:50 +0000 (14:49 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Fri, 13 Sep 2024 07:23:21 +0000 (16:23 +0900)
Change-Id: Ie7398a942a10a2623de0c262ae4614c64467f06e

src/bin/debug/e_info_server_input.c
src/bin/inputmgr/e_input_backend_intern.h

index 606d48111a9d7b694a920a6a8136b2f9a26bc03e..c52056da6baf63de6f122bfe80df0798c977297e 100644 (file)
@@ -541,6 +541,16 @@ e_info_server_input_deinit_device(void)
    return;
 }
 
+static void
+_e_info_input_thread_keygen(void *data)
+{
+   E_Input_Thread_Request_Input_Gen_Data *input_data = data;
+   EINA_SAFETY_ON_NULL_RETURN(input_data);
+
+   ICINF("[input thread|%s] code(%d), state(%d)\n", __func__, input_data->key_code, input_data->state);
+   _e_info_input_keygen(input_data->key_code, input_data->state);
+}
+
 E_API char *
 e_info_server_input_keygen(char *name, int code, int state)
 {
@@ -553,27 +563,84 @@ e_info_server_input_keygen(char *name, int code, int state)
    else
      code = code - 8;
 
-   _e_info_input_keygen(code, state);
+   if (e_input_thread_mode_get())
+     {
+        E_Input_Thread_Request_Input_Gen_Data input_data;
+        memset(&input_data, 0, sizeof(E_Input_Thread_Request_Input_Gen_Data));
+
+        input_data.key_code = code;
+        input_data.state = state;
+
+        e_input_backend_thread_safe_call(_e_info_input_thread_keygen, &input_data, sizeof(E_Input_Thread_Request_Input_Gen_Data));
+     }
+   else
+     _e_info_input_keygen(code, state);
 
    return E_INFO_INPUT_RESULT_NONE;
 }
 
+static void
+_e_info_input_thread_touchgen(void *data)
+{
+   E_Input_Thread_Request_Input_Gen_Data *input_data = data;
+   EINA_SAFETY_ON_NULL_RETURN(input_data);
+
+   ICINF("[input thread|%s] index(%d), state(%d), x(%d), y(%d)\n", __func__, input_data->index, input_data->state, input_data->x, input_data->y);
+   _e_info_input_touchgen(input_data->index, input_data->x, input_data->y, input_data->state);
+}
+
 E_API char *
 e_info_server_input_touchgen(int idx, int x, int y, int state)
 {
    if (_e_info_input.gen.fd < 0) return "Initialize device first";
 
-   _e_info_input_touchgen(idx, x, y, state);
+   if (e_input_thread_mode_get())
+     {
+        E_Input_Thread_Request_Input_Gen_Data input_data;
+        memset(&input_data, 0, sizeof(E_Input_Thread_Request_Input_Gen_Data));
+
+        input_data.index = idx;
+        input_data.state = state;
+        input_data.x = x;
+        input_data.y = y;
+
+        e_input_backend_thread_safe_call(_e_info_input_thread_touchgen, &input_data, sizeof(E_Input_Thread_Request_Input_Gen_Data));
+     }
+   else
+     _e_info_input_touchgen(idx, x, y, state);
 
    return E_INFO_INPUT_RESULT_NONE;
 }
 
+static void
+_e_info_input_thread_mousegen(void *data)
+{
+   E_Input_Thread_Request_Input_Gen_Data *input_data = data;
+   EINA_SAFETY_ON_NULL_RETURN(input_data);
+
+   ICINF("[input thread|%s] button(%d), state(%d), x(%d), y(%d)\n", __func__, input_data->button, input_data->state, input_data->x, input_data->y);
+   _e_info_input_mousegen(input_data->button, input_data->x, input_data->y, input_data->state);
+}
+
 E_API char *
 e_info_server_input_mousegen(int button, int x, int y, int state)
 {
    if (_e_info_input.gen.fd < 0) return "Initialize device first";
 
-   _e_info_input_mousegen(button, x, y, state);
+   if (e_input_thread_mode_get())
+     {
+        E_Input_Thread_Request_Input_Gen_Data input_data;
+        memset(&input_data, 0, sizeof(E_Input_Thread_Request_Input_Gen_Data));
+
+        input_data.button = button;
+        input_data.state = state;
+        input_data.x = x;
+        input_data.y = y;
+
+        e_input_backend_thread_safe_call(_e_info_input_thread_mousegen, &input_data, sizeof(E_Input_Thread_Request_Input_Gen_Data));
+     }
+   else
+     _e_info_input_mousegen(button, x, y, state);
 
    return E_INFO_INPUT_RESULT_NONE;
 }
index e767d38bd82d0448bad08d5f38029a7600157f70..14c5fbe22f7bbc595413d6a789a3bf9ed1bd6c9a 100644 (file)
@@ -33,6 +33,15 @@ struct _E_Input_Backend
    int main_to_input_thread_pipe_fd[2];
 };
 
+typedef struct
+{
+   int index;
+   int key_code;
+   int button;
+   int state;
+   int x, y;
+} E_Input_Thread_Request_Input_Gen_Data;
+
 EINTERN void      e_input_backend_thread_init();
 EINTERN void      e_input_backend_thread_shutdown();