From 6a664bf15e06482d8d138f700d5d6e61e474f52b Mon Sep 17 00:00:00 2001 From: jeon Date: Tue, 27 Aug 2019 18:03:27 +0900 Subject: [PATCH] e_input_device: add a new api for remap keyboard Change-Id: I0c730955707b46146060a9bd42b07a3be28b79e1 --- src/bin/e_input.h | 1 + src/bin/e_input_device.c | 31 +++++++++++++++++++++++++++++++ src/bin/e_input_evdev.c | 2 +- 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/bin/e_input.h b/src/bin/e_input.h index 7ac366a..7dd7694 100644 --- a/src/bin/e_input.h +++ b/src/bin/e_input.h @@ -100,6 +100,7 @@ E_API int e_input_evdev_wheel_click_angle_get(E_Input_Evdev *dev); E_API Ecore_Device *e_input_evdev_get_ecore_device(const char *path, Ecore_Device_Class clas); E_API unsigned int e_input_device_touch_pressed_get(E_Input_Device *dev); +E_API Eina_Bool e_input_device_keyboard_remap_set(E_Input_Device *dev, int *from_keys, int *to_keys, int num); #endif #endif diff --git a/src/bin/e_input_device.c b/src/bin/e_input_device.c index 4311dfc..8485e33 100644 --- a/src/bin/e_input_device.c +++ b/src/bin/e_input_device.c @@ -1236,3 +1236,34 @@ e_input_device_touch_pressed_get(E_Input_Device *dev) return pressed; } + +E_API Eina_Bool +e_input_device_keyboard_remap_set(E_Input_Device *dev, int *from_keys, int *to_keys, int num) +{ + E_Input_Seat *seat = NULL; + E_Input_Evdev *edev = NULL; + Eina_List *l = NULL, *l2 = NULL; + Eina_Bool res = EINA_TRUE, ret = EINA_TRUE; + + EINA_SAFETY_ON_NULL_RETURN_VAL(dev, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(dev->seats, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(from_keys, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(to_keys, EINA_FALSE); + EINA_SAFETY_ON_TRUE_RETURN_VAL(num <= 0, EINA_FALSE); + + EINA_LIST_FOREACH(dev->seats, l, seat) + { + EINA_LIST_FOREACH(e_input_seat_evdev_list_get(seat), l2, edev) + { + if (edev->caps & E_INPUT_SEAT_KEYBOARD) + { + res = e_input_evdev_key_remap_enable(edev, EINA_TRUE); + if (res) + res = e_input_evdev_key_remap_set(edev, from_keys, to_keys, num); + } + if (!res) ret = EINA_FALSE; + } + } + + return ret; +} diff --git a/src/bin/e_input_evdev.c b/src/bin/e_input_evdev.c index bb99d94..57e7362 100644 --- a/src/bin/e_input_evdev.c +++ b/src/bin/e_input_evdev.c @@ -409,7 +409,7 @@ _device_handle_key(struct libinput_device *device, struct libinput_event_keyboar timestamp = libinput_event_keyboard_get_time(event); code = libinput_event_keyboard_get_key(event); - code = _device_remapped_key_get(edev, code) + 8; + code = _device_remapped_key_get(edev, code + 8); state = libinput_event_keyboard_get_key_state(event); key_count = libinput_event_keyboard_get_seat_key_count(event); -- 2.7.4