From bc3f85abed41fa96bb59a869eea44af6ec9c29d2 Mon Sep 17 00:00:00 2001
From: notaz <notasas@gmail.com>
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@956 be3aeb3a-fb24-0410-a615-afba39da0efa
---
 platform/linux/in_evdev.c | 24 +++++++++++++++++++-----
 1 file changed, 19 insertions(+), 5 deletions(-)

diff --git a/platform/linux/in_evdev.c b/platform/linux/in_evdev.c
index c6150612..b447da16 100644
--- a/platform/linux/in_evdev.c
+++ b/platform/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.5