From dd1e7172862c6e1f7f1c84c37c7800a783fbb73c Mon Sep 17 00:00:00 2001 From: notaz Date: Sun, 22 Jul 2012 16:56:34 +0000 Subject: [PATCH] menu: support seeking the filelist with letter keys git-svn-id: file:///home/notaz/opt/svn/PicoDrive/platform@956 be3aeb3a-fb24-0410-a615-afba39da0efa --- linux/in_evdev.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/linux/in_evdev.c b/linux/in_evdev.c index c615061..b447da1 100644 --- a/linux/in_evdev.c +++ b/linux/in_evdev.c @@ -559,9 +559,10 @@ static const struct { #define KEY_PBTN_MAP_SIZE (sizeof(key_pbtn_map) / sizeof(key_pbtn_map[0])) -static int in_evdev_menu_translate(void *drv_data, int keycode) +static int in_evdev_menu_translate(void *drv_data, int keycode, char *charcode) { in_evdev_t *dev = drv_data; + int ret = 0; int i; if (keycode < 0) @@ -578,12 +579,25 @@ static int in_evdev_menu_translate(void *drv_data, int keycode) } else { - for (i = 0; i < KEY_PBTN_MAP_SIZE; i++) - if (key_pbtn_map[i].key == keycode) - return key_pbtn_map[i].pbtn; + for (i = 0; i < KEY_PBTN_MAP_SIZE; i++) { + if (key_pbtn_map[i].key == keycode) { + ret = key_pbtn_map[i].pbtn; + break; + } + } + + if (charcode != NULL && (unsigned int)keycode < KEY_CNT && + in_evdev_keys[keycode] != NULL && in_evdev_keys[keycode][1] == 0) + { + char c = in_evdev_keys[keycode][0]; + if ('A' <= c && c <= 'Z') + c = 'a' + c - 'A'; + ret |= PBTN_CHAR; + *charcode = c; + } } - return 0; + return ret; } /* remove binds of missing keys, count remaining ones */ -- 2.39.2