e_input: add E_API e_input_device_keyboard_has_key(dev, device_path, code) 90/305790/2
authorduna.oh <duna.oh@samsung.com>
Tue, 6 Feb 2024 09:41:20 +0000 (18:41 +0900)
committerDuna Oh <duna.oh@samsung.com>
Thu, 8 Feb 2024 01:30:06 +0000 (01:30 +0000)
E_API for checking if a keyboard key is present on a given input device

Change-Id: I752453b81b8fe0216fdd8f0039cdcefd69d0d49d

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

index b430f218cdd1a03195e7df28a64ed36955c6281e..0a187bdad0e721151bfad1403b4be33a96d112ab 100644 (file)
@@ -184,5 +184,7 @@ EINTERN void e_input_boost_unlock(GMutex *mutex);
 EINTERN void e_input_thread_run(E_Input_Backend *input);
 EINTERN Eina_Bool e_input_libinput_context_create(E_Input_Backend *input);
 
+E_API Eina_Bool        e_input_device_keyboard_has_key(E_Input_Device *dev, const char *device_path, uint32_t code);
+
 #endif
 #endif
index 92bff7986f460bfda2081b335e5ddbb1b5214ae0..4cdb31304b147245f9427df31b2eeb4858820679 100644 (file)
@@ -1631,3 +1631,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;
+}