From 9227a7770e0d144109ee34ae34a270c6d06b9f80 Mon Sep 17 00:00:00 2001 From: notaz Date: Sat, 17 Nov 2012 02:09:18 +0200 Subject: [PATCH] in_sdl: allow external event handler --- in_sdl.c | 17 ++++++++++++++--- in_sdl.h | 3 ++- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/in_sdl.c b/in_sdl.c index 0ba1d05..e1f8753 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", @@ -238,7 +240,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 +294,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 +332,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 +471,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; } - diff --git a/in_sdl.h b/in_sdl.h index 47f7a83..2f82312 100644 --- a/in_sdl.h +++ b/in_sdl.h @@ -1,3 +1,4 @@ struct in_default_bind; -void in_sdl_init(const struct in_default_bind *defbinds); +void in_sdl_init(const struct in_default_bind *defbinds, + void (*handler)(void *event)); -- 2.39.5