X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=in_sdl.c;h=2cdbd3f22c5f1eb071c29fc9b55752a62ee17407;hb=c54d04fd84f59c60c6ecdbd2502fbda5de735b4b;hp=0ba1d0511ac8aa10809df1b12c5f5fa3e56340bf;hpb=f89d84717ae3536779f04cdfb57cf940d2bd8ade;p=libpicofe.git diff --git a/in_sdl.c b/in_sdl.c index 0ba1d05..2cdbd3f 100644 --- a/in_sdl.c +++ b/in_sdl.c @@ -26,6 +26,8 @@ struct in_sdl_state { keybits_t keystate[SDLK_LAST / KEYBITS_WORD_BITS + 1]; }; +static void (*ext_event_handler)(void *event); + static const char * const in_sdl_keys[SDLK_LAST] = { [SDLK_BACKSPACE] = "backspace", [SDLK_TAB] = "tab", @@ -121,7 +123,6 @@ static const char * const in_sdl_keys[SDLK_LAST] = { [SDLK_DOWN] = "down", [SDLK_RIGHT] = "right", [SDLK_LEFT] = "left", - [SDLK_DOWN] = "down", [SDLK_INSERT] = "insert", [SDLK_HOME] = "home", [SDLK_END] = "end", @@ -238,7 +239,7 @@ static int handle_event(struct in_sdl_state *state, SDL_Event *event, int *kc_out, int *down_out) { if (event->type != SDL_KEYDOWN && event->type != SDL_KEYUP) - return 0; + return -1; update_keystate(state->keystate, event->key.keysym.sym, event->type == SDL_KEYDOWN); @@ -292,6 +293,8 @@ static int handle_joy_event(struct in_sdl_state *state, SDL_Event *event, down = event->jbutton.state == SDL_PRESSED; ret = 1; break; + default: + return -1; } if (ret) @@ -328,6 +331,12 @@ static int collect_events(struct in_sdl_state *state, int *one_kc, int *one_down else ret = handle_event(state, &events[i], one_kc, one_down); + if (ret == -1) { + if (ext_event_handler != NULL) + ext_event_handler(&events[i]); + continue; + } + retval |= ret; if (one_kc != NULL && ret) goto out; @@ -461,8 +470,9 @@ static const in_drv_t in_sdl_drv = { .menu_translate = in_sdl_menu_translate, }; -void in_sdl_init(const struct in_default_bind *defbinds) +void in_sdl_init(const struct in_default_bind *defbinds, + void (*handler)(void *event)) { in_register_driver(&in_sdl_drv, defbinds); + ext_event_handler = handler; } -