X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fvideo%2Fomapdss%2Fosdl_input.c;h=e6fb1f765051e6b0d4193893f1c17d0d5480fc84;hb=d45df001413d714c8995e755f04c9936b18aa44a;hp=4908661d79e4d6ae081ff6f73546d271de5f1b05;hpb=b983f171bf57138ebcfce244b276bc9d22e63452;p=sdl_omap.git diff --git a/src/video/omapdss/osdl_input.c b/src/video/omapdss/osdl_input.c index 4908661..e6fb1f7 100644 --- a/src/video/omapdss/osdl_input.c +++ b/src/video/omapdss/osdl_input.c @@ -1,5 +1,5 @@ /* - * (C) Gražvydas "notaz" Ignotas, 2010 + * (C) Gražvydas "notaz" Ignotas, 2010-2012 * * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. * See the COPYING file in the top-level directory. @@ -23,7 +23,7 @@ #include #endif -#include "omapsdl.h" +#include "osdl.h" /* XXX: these should go to private data */ static int osdl_evdev_devs[32]; @@ -71,7 +71,7 @@ static short osdl_evdev_map[KEY_CNT] = { [KEY_Z] = SDLK_z, [KEY_SLASH] = SDLK_SLASH, /* / */ [KEY_SPACE] = SDLK_SPACE, [KEY_TAB] = SDLK_TAB, [KEY_BACKSPACE] = SDLK_BACKSPACE, [KEY_INSERT] = SDLK_INSERT, - [KEY_FN] = SDLK_MODE, + [KEY_FN] = SDLK_WORLD_95, [KEY_DOT] = SDLK_PERIOD, [KEY_F21] = SDLK_COLON, /* : */ [KEY_ENTER] = SDLK_RETURN, [KEY_LEFTSHIFT] = SDLK_LSHIFT, [KEY_CAPSLOCK] = SDLK_CAPSLOCK, @@ -559,7 +559,7 @@ void omapsdl_input_finish(void) } int omapsdl_input_get_events(int timeout_ms, - int (*key_cb)(void *cb_arg, int sdl_kc, int is_pressed), + int (*key_cb)(void *cb_arg, int sdl_kc, int sdl_sc, int is_pressed), int (*ts_cb)(void *cb_arg, int x, int y, unsigned int pressure), void *cb_arg) { @@ -625,8 +625,8 @@ int omapsdl_input_get_events(int timeout_ms, break; } - if (ev.type != EV_KEY) - continue; /* not key event */ + if (ev.type != EV_KEY || key_cb == NULL) + continue; /* not key event or not needed */ if ((unsigned int)ev.value > 1) continue; /* not key up/down */ if ((unsigned int)ev.code >= ARRAY_SIZE(osdl_evdev_map)) @@ -634,7 +634,8 @@ int omapsdl_input_get_events(int timeout_ms, sdl_kc = osdl_evdev_map[ev.code]; if (sdl_kc == 0) continue; /* not mapped */ - ret = key_cb(cb_arg, sdl_kc, ev.value); + /* scancode note: stock SDL doesn't do +8 in fbcon driver */ + ret = key_cb(cb_arg, sdl_kc, ev.code + 8, ev.value); if (ret != 0) return ret; } @@ -649,13 +650,15 @@ static unsigned char g_keystate[SDLK_LAST]; struct key_event { int sdl_kc; + int sdl_sc; int is_pressed; }; -static int do_key_cb(void *cb_arg, int sdl_kc, int is_pressed) +static int do_key_cb(void *cb_arg, int sdl_kc, int sdl_sc, int is_pressed) { struct key_event *ev = cb_arg; ev->sdl_kc = sdl_kc; + ev->sdl_sc = sdl_sc; ev->is_pressed = is_pressed; return 1; /* done */ @@ -680,6 +683,7 @@ static int do_event(SDL_Event *event, int timeout) // event->key.which = event->key.state = ev.is_pressed ? SDL_PRESSED : SDL_RELEASED; event->key.keysym.sym = ev.sdl_kc; + event->key.keysym.scancode = ev.sdl_sc; // event->key.keysym.mod return 1;