X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=frontend%2Fcommon%2Fin_sdl.c;h=14749e5c039569704f157d2f1e4a2e3622fa9ede;hb=2c843d964027089a747453afc0b07d0eac5835d9;hp=ed136105009745f783c3ecaf22bc4d1aa15dbb69;hpb=b07c18e8645a17be916266820ae564e0d320cc1a;p=pcsx_rearmed.git diff --git a/frontend/common/in_sdl.c b/frontend/common/in_sdl.c index ed136105..14749e5c 100644 --- a/frontend/common/in_sdl.c +++ b/frontend/common/in_sdl.c @@ -157,7 +157,7 @@ static void in_sdl_probe(void) { keybits_t *keystate; - keystate = calloc(SDLK_LAST / KEYBITS_WORD_BITS + 1, 1); + keystate = calloc(SDLK_LAST / KEYBITS_WORD_BITS + 1, sizeof(keybits_t)); if (keystate == NULL) { fprintf(stderr, "in_sdl: OOM\n"); return; @@ -270,8 +270,9 @@ static const struct { #define KEY_PBTN_MAP_SIZE (sizeof(key_pbtn_map) / sizeof(key_pbtn_map[0])) -static int in_sdl_menu_translate(void *drv_data, int keycode) +static int in_sdl_menu_translate(void *drv_data, int keycode, char *charcode) { + int ret = 0; int i; if (keycode < 0) @@ -284,12 +285,22 @@ static int in_sdl_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 < SDLK_LAST && + in_sdl_keys[keycode] != NULL && in_sdl_keys[keycode][1] == 0) + { + ret |= PBTN_CHAR; + *charcode = in_sdl_keys[keycode][0]; + } } - return 0; + return ret; } static const in_drv_t in_sdl_drv = {