e_input: add E_API e_input_device_keyboard_has_key(dev, device_path, code) 88/305788/1
authorduna.oh <duna.oh@samsung.com>
Tue, 6 Feb 2024 09:41:20 +0000 (18:41 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Thu, 8 Feb 2024 01:09:30 +0000 (10:09 +0900)
E_API for checking if a keyboard key is present on a given input device

Change-Id: I752453b81b8fe0216fdd8f0039cdcefd69d0d49d

src/bin/e_input_device.c
src/include/e_input.h

index 6f1b108..3437673 100644 (file)
@@ -1639,3 +1639,53 @@ e_input_device_mouse_accel_enable_set(const char *device_name, Eina_Bool enable)
 
    return EINA_TRUE;
 }
+
+static E_Input_Evdev *
+_e_input_device_find_by_path_cap(E_Input_Device *dev, const char *path, E_Input_Seat_Capabilities caps)
+{
+   E_Input_Seat *seat;
+   E_Input_Evdev *edev = NULL;
+   Eina_List *l, *ll;
+   Eina_Bool found = EINA_FALSE;
+
+   if (!dev)
+     dev = _e_input_device_default_get();
+
+   EINA_SAFETY_ON_TRUE_RETURN_VAL(!dev, EINA_FALSE);
+   EINA_SAFETY_ON_TRUE_RETURN_VAL(!path, EINA_FALSE);
+   EINA_LIST_FOREACH(dev->seats, l, seat)
+     {
+        EINA_LIST_FOREACH(seat->devices, ll, edev)
+          {
+             if (!e_util_strcmp(edev->path, path) &&
+                 (!caps || (caps & edev->caps)))
+               {
+                  found = EINA_TRUE;
+                  break;
+               }
+          }
+        if (found) break;
+     }
+
+   if (!found || !edev)
+     {
+        ERR("Failed to find input device: %s", path);
+        return NULL;
+     }
+
+   return edev;
+}
+
+E_API Eina_Bool
+e_input_device_keyboard_has_key(E_Input_Device *dev, const char *device_path, uint32_t code)
+{
+   E_Input_Evdev *edev = NULL;
+   Eina_Bool ret = EINA_FALSE;
+
+   edev = _e_input_device_find_by_path_cap(dev, device_path, E_INPUT_SEAT_KEYBOARD);
+   if (edev)
+     ret = (libinput_device_keyboard_has_key(edev->device, code) == 1);
+   INF("device(%s) keyboard_has_key(%d) returns %s", device_path, code, ret ? "True" : "False");
+
+   return ret;
+}
index 02bec41..025d6e2 100644 (file)
@@ -93,6 +93,7 @@ E_API const Eina_List *e_input_devices_get(void);
 E_API Eina_Bool        e_input_device_pointer_warp(E_Input_Device *dev, int x, int y);
 E_API Eina_Bool        e_input_device_mouse_accel_speed_set(E_Input_Device *dev, double speed);
 E_API Eina_Bool        e_input_device_mouse_accel_enable_set(const char *device_name, Eina_Bool enable);
+E_API Eina_Bool        e_input_device_keyboard_has_key(E_Input_Device *dev, const char *device_path, uint32_t code);
 
 E_API unsigned int e_input_touch_max_count_get();