e_input_device: add input to dev->inputs list at e_input_device 85/314285/3
authorSooChan Lim <sc1.lim@samsung.com>
Tue, 9 Jul 2024 01:40:12 +0000 (10:40 +0900)
committerDoyoun Kang <doyoun.kang@samsung.com>
Wed, 10 Jul 2024 04:29:50 +0000 (04:29 +0000)
For removing circular dependency, e_input_device depends on e_input_backend.
e_input_backend don't need to know the e_input_device.

Change-Id: I2f6cb2000825d2d08683326d71807c65cab3794b

src/bin/inputmgr/e_input_device.c
src/bin/inputmgr/e_input_device_intern.h

index 562dc75c1fe5791d09577c67a195040aa7b71274..b10f254b3cfbe4805c5943a484d70a6fc1678d7a 100644 (file)
@@ -489,7 +489,7 @@ e_input_device_rotation_set(E_Input_Device *dev, unsigned int rotation)
    primary_output = e_display_primary_output_get();
 #else
    primary_output = e_comp_screen_primary_output_get(e_comp->e_comp_screen);
-#endif   
+#endif
    EINA_SAFETY_ON_NULL_RETURN(primary_output);
 
    EINA_LIST_FOREACH(dev->seats, l, seat)
@@ -610,7 +610,7 @@ e_input_device_touch_rotation_set(E_Input_Device *dev, unsigned int rotation)
    primary_output = e_display_primary_output_get();
 #else
    primary_output = e_comp_screen_primary_output_get(e_comp->e_comp_screen);
-#endif  
+#endif
    e_output_size_get(primary_output, &output_w, &output_h);
    default_w = (float)output_w;
    default_h = (float)output_h;
@@ -677,7 +677,7 @@ e_input_device_touch_transformation_set(E_Input_Device *dev, int offset_x, int o
    primary_output = e_display_primary_output_get();
 #else
    primary_output = e_comp_screen_primary_output_get(e_comp->e_comp_screen);
-#endif  
+#endif
    e_output_size_get(primary_output, &output_w, &output_h);
    default_w = (float)output_w;
    default_h = (float)output_h;
@@ -750,24 +750,49 @@ _libinput_log_handler(struct libinput *libinput EINA_UNUSED,
 EINTERN Eina_Bool
 e_input_device_input_backend_create(E_Input_Device *dev, E_Input_Libinput_Backend backend)
 {
-   Eina_Bool res = EINA_FALSE;
+   E_Input_Backend *input;
+   char *env;
+   int ndevices = 0;
 
    EINA_SAFETY_ON_NULL_RETURN_VAL(dev, EINA_FALSE);
 
    if (backend == E_INPUT_LIBINPUT_BACKEND_UDEV)
      {
-        TRACE_INPUT_BEGIN(e_input_device_input_create_libinput_udev);
-        res = e_input_device_input_create_libinput_udev(dev);
+        TRACE_INPUT_BEGIN(e_input_backend_create_libinput_udev);
+        input = e_input_backend_create_libinput_udev();
         TRACE_INPUT_END();
+        if (!input) return EINA_FALSE;
+
+        /* set reference for parent device */
+        input->dev = dev; // TODO: make a api to set dev
      }
-   else if (backend == E_INPUT_LIBINPUT_BACKEND_PATH)
+   else // (backend == E_INPUT_LIBINPUT_BACKEND_PATH)
      {
-        TRACE_INPUT_BEGIN(e_input_device_input_create_libinput_path);
-        res = e_input_device_input_create_libinput_path(dev);
+        TRACE_INPUT_BEGIN(e_input_backend_create_libinput_path);
+        env = e_util_env_get("PATH_DEVICES_NUM");
+        if (env)
+          {
+             ndevices = atoi(env);
+             E_FREE(env);
+          }
+
+        if (ndevices <= 0 || ndevices >= INT_MAX)
+          return EINA_TRUE;
+
+        INF("PATH_DEVICES_NUM : %d", ndevices);
+
+        input = e_input_backend_create_libinput_path(ndevices);
         TRACE_INPUT_END();
+        if (!input) return EINA_FALSE;
+
+        /* set reference for parent device */
+        input->dev = dev; // TODO: make a api to set dev
      }
 
-   return res;
+   /* append this input */
+   dev->inputs = eina_list_append(dev->inputs, input);
+
+   return EINA_TRUE;
 }
 
 static void
@@ -879,26 +904,20 @@ _e_input_device_input_thread_init_udev_backend(E_Input_Backend *input)
 }
 
 /* public functions */
-EINTERN Eina_Bool
-e_input_device_input_create_libinput_udev(E_Input_Device *dev)
+EINTERN E_Input_Backend *
+e_input_backend_create_libinput_udev()
 {
    E_Input_Backend *input;
    char *env = NULL;
    int buf_size = 0;
    int res = 0;
 
-   /* check for valid device */
-   EINA_SAFETY_ON_NULL_RETURN_VAL(dev, EINA_FALSE);
-
    /* try to allocate space for new input structure */
    if (!(input = calloc(1, sizeof(E_Input_Backend))))
      {
-        return EINA_FALSE;
+        return NULL;
      }
 
-   /* set reference for parent device */
-   input->dev = dev;
-
    input->backend = E_INPUT_LIBINPUT_BACKEND_UDEV;
    input->log_disable = EINA_FALSE;
    input->log_use_eina = EINA_FALSE;
@@ -937,7 +956,7 @@ e_input_device_input_create_libinput_udev(E_Input_Device *dev)
    if (e_input_thread_mode_get())
      {
         e_input_backend_thread_input_backend_set(input);
-        return EINA_TRUE;
+        return input;
      }
 
    if (e_input_thread_enabled_get())
@@ -949,7 +968,7 @@ e_input_device_input_create_libinput_udev(E_Input_Device *dev)
              goto err;
         }
 
-        return EINA_TRUE;
+        return input;
      }
 
    if (!e_input_libinput_context_create(input))
@@ -962,19 +981,16 @@ e_input_device_input_create_libinput_udev(E_Input_Device *dev)
         goto err;
      }
 
-   /* append this input */
-   dev->inputs = eina_list_append(dev->inputs, input);
-
    /* process pending events */
    e_input_backend_events_process(input);
 
-   return EINA_TRUE;
+   return input;
 
 err:
    if (input->libinput) libinput_unref(input->libinput);
    free(input);
 
-   return EINA_FALSE;
+   return NULL;
 }
 
 EINTERN Eina_Bool
@@ -1128,40 +1144,19 @@ _e_input_device_input_thread_init_path_backend(E_Input_Backend *input)
    return !!(input->thread);
 }
 
-EINTERN Eina_Bool
-e_input_device_input_create_libinput_path(E_Input_Device *dev)
+EINTERN E_Input_Backend *
+e_input_backend_create_libinput_path(int ndevices)
 {
    E_Input_Backend *input;
    struct libinput_device *device;
-   int ndevices = 0;
    char *env;
 
-   /* check for valid device */
-   EINA_SAFETY_ON_NULL_RETURN_VAL(dev, EINA_FALSE);
-
-   env = e_util_env_get("PATH_DEVICES_NUM");
-   if (env)
-     {
-        ndevices = atoi(env);
-        E_FREE(env);
-     }
-
-   if (ndevices <= 0 || ndevices >= INT_MAX)
-     {
-        return EINA_TRUE;
-     }
-
-   INF("PATH_DEVICES_NUM : %d", ndevices);
-
    /* try to allocate space for new input structure */
    if (!(input = calloc(1, sizeof(E_Input_Backend))))
      {
-        return EINA_FALSE;
+        return NULL;
      }
 
-   /* set reference for parent device */
-   input->dev = dev;
-
    input->backend = E_INPUT_LIBINPUT_BACKEND_PATH;
    input->path_ndevices = ndevices;
    input->log_disable = EINA_FALSE;
@@ -1189,7 +1184,7 @@ e_input_device_input_create_libinput_path(E_Input_Device *dev)
              goto err;
         }
 
-        return EINA_TRUE;
+        return input;
      }
 
    /* try to create libinput context */
@@ -1235,19 +1230,16 @@ e_input_device_input_create_libinput_path(E_Input_Device *dev)
         goto err;
      }
 
-   /* append this input */
-   dev->inputs = eina_list_append(dev->inputs, input);
-
    /* process pending events */
    e_input_backend_events_process(input);
 
-   return EINA_TRUE;
+   return input;
 
 err:
    if (input->libinput) libinput_unref(input->libinput);
    free(input);
 
-   return EINA_FALSE;
+   return NULL;
 }
 
 void
index a72ef46c61a921bcb76982951f740591273b54fd..27abdf3a727255ff1fcfa124623599be56081723 100644 (file)
@@ -3,6 +3,7 @@
 
 #include "e_intern.h"
 #include "e_input_intern.h"
+#include "e_input_backend_intern.h"
 
 struct _E_Input_Device
 {
@@ -39,8 +40,8 @@ EINTERN void            e_input_device_keyboard_cached_keymap_set(struct xkb_key
 EINTERN Eina_Bool       e_input_device_keyboard_remap_set(E_Input_Device *dev, int *from_keys, int *to_keys, int num);
 
 EINTERN Eina_Bool       e_input_device_input_backend_create(E_Input_Device *dev, E_Input_Libinput_Backend backend);
-EINTERN Eina_Bool       e_input_device_input_create_libinput_udev(E_Input_Device *dev);
-EINTERN Eina_Bool       e_input_device_input_create_libinput_path(E_Input_Device *dev);
+EINTERN E_Input_Backend *e_input_backend_create_libinput_udev(void);
+EINTERN E_Input_Backend *e_input_backend_create_libinput_path(int ndevices);
 EINTERN Eina_Bool       e_input_device_libinput_log_level_set(E_Input_Device *dev, unsigned int level);
 
 EINTERN void            e_input_device_pointer_xy_get(E_Input_Device *dev, int *x, int *y);