From 15c9e0ae7e310aa8f1bd4928046414b3caf454f9 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sun, 6 Mar 2016 01:31:46 +0100 Subject: [PATCH] Add fallback --- input/drivers_keyboard/keyboard_event_udev.c | 11 +++++++---- input/drivers_keyboard/keyboard_event_xkb.c | 8 +++++--- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/input/drivers_keyboard/keyboard_event_udev.c b/input/drivers_keyboard/keyboard_event_udev.c index d1c36d4513..5ad3b6135e 100644 --- a/input/drivers_keyboard/keyboard_event_udev.c +++ b/input/drivers_keyboard/keyboard_event_udev.c @@ -26,12 +26,14 @@ static uint8_t udev_key_state[UDEV_MAX_KEYS]; #ifdef HAVE_XKBCOMMON void free_xkb(void); -void handle_xkb(int code, int value); +int handle_xkb(int code, int value); #endif void udev_handle_keyboard(void *data, const struct input_event *event, udev_input_device_t *dev) { + bool key_handled = false; + switch (event->type) { case EV_KEY: @@ -41,12 +43,13 @@ void udev_handle_keyboard(void *data, BIT_CLEAR(udev_key_state, event->code); #ifdef HAVE_XKBCOMMON - handle_xkb(event->code, event->value); -#else + if (handle_xkb(event->code, event->value) == 0) + return; +#endif + input_keyboard_event(event->value, input_keymaps_translate_keysym_to_rk(event->code), 0, 0, RETRO_DEVICE_KEYBOARD); -#endif break; default: diff --git a/input/drivers_keyboard/keyboard_event_xkb.c b/input/drivers_keyboard/keyboard_event_xkb.c index 3c8295d6ac..7b1db47ff0 100644 --- a/input/drivers_keyboard/keyboard_event_xkb.c +++ b/input/drivers_keyboard/keyboard_event_xkb.c @@ -124,7 +124,7 @@ error: /* FIXME: Don't handle composed and dead-keys properly. * Waiting for support in libxkbcommon ... */ -void handle_xkb(int code, int value) +int handle_xkb(int code, int value) { unsigned i; const xkb_keysym_t *syms = NULL; @@ -134,7 +134,7 @@ void handle_xkb(int code, int value) int xk_code = code + 8; if (!xkb_state) - return; + return -1; if (value == 2) /* Repeat, release first explicitly. */ xkb_state_update_key(xkb_state, xk_code, XKB_KEY_UP); @@ -143,7 +143,7 @@ void handle_xkb(int code, int value) num_syms = xkb_state_key_get_syms(xkb_state, xk_code, &syms); if (!syms) - return; + return -1; xkb_state_update_key(xkb_state, xk_code, value ? XKB_KEY_DOWN : XKB_KEY_UP); @@ -165,4 +165,6 @@ void handle_xkb(int code, int value) for (i = 1; i < num_syms; i++) input_keyboard_event(value, RETROK_UNKNOWN, xkb_keysym_to_utf32(syms[i]), mod, RETRO_DEVICE_KEYBOARD); + + return 0; }