From b491cfdd2fb378e692fe85d9bd36d3fd66db9cf2 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Sun, 10 Jan 2010 18:25:04 +0000 Subject: [PATCH] Merged r4874:4875 from branches/SDL-1.2: testwm keyboard debug output. --- test/testwm.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 73 insertions(+), 3 deletions(-) diff --git a/test/testwm.c b/test/testwm.c index db245d6a7..884ca7913 100644 --- a/test/testwm.c +++ b/test/testwm.c @@ -175,6 +175,74 @@ HotKey_Quit(void) SDL_PushEvent(&event); } + +static void +print_modifiers(void) +{ + int mod; + printf(" modifiers:"); + mod = SDL_GetModState(); + if(!mod) { + printf(" (none)"); + return; + } + if(mod & KMOD_LSHIFT) + printf(" LSHIFT"); + if(mod & KMOD_RSHIFT) + printf(" RSHIFT"); + if(mod & KMOD_LCTRL) + printf(" LCTRL"); + if(mod & KMOD_RCTRL) + printf(" RCTRL"); + if(mod & KMOD_LALT) + printf(" LALT"); + if(mod & KMOD_RALT) + printf(" RALT"); + if(mod & KMOD_LMETA) + printf(" LMETA"); + if(mod & KMOD_RMETA) + printf(" RMETA"); + if(mod & KMOD_NUM) + printf(" NUM"); + if(mod & KMOD_CAPS) + printf(" CAPS"); + if(mod & KMOD_MODE) + printf(" MODE"); +} + +static void PrintKey(const SDL_keysym *sym, int pressed) +{ + /* Print the keycode, name and state */ + if ( sym->sym ) { + printf("Key %s: %d-%s ", pressed ? "pressed" : "released", + sym->sym, SDL_GetKeyName(sym->sym)); + } else { + printf("Unknown Key (scancode = %d) %s ", sym->scancode, + pressed ? "pressed" : "released"); + } + + /* Print the translated character, if one exists */ + if ( sym->unicode ) { + /* Is it a control-character? */ + if ( sym->unicode < ' ' ) { + printf(" (^%c)", sym->unicode+'@'); + } else { +#ifdef UNICODE + printf(" (%c)", sym->unicode); +#else + /* This is a Latin-1 program, so only show 8-bits */ + if ( !(sym->unicode & 0xFF00) ) + printf(" (%c)", sym->unicode); + else + printf(" (0x%X)", sym->unicode); +#endif + } + } + print_modifiers(); + printf("\n"); +} + + static int (SDLCALL * old_filterfunc) (void *, SDL_Event *); static void *old_filterdata; @@ -230,6 +298,7 @@ FilterEvents(void *userdata, SDL_Event * event) return (0); case SDL_KEYDOWN: + PrintKey(&event->key.keysym, 1); if (event->key.keysym.sym == SDLK_ESCAPE) { HotKey_Quit(); } @@ -247,6 +316,10 @@ FilterEvents(void *userdata, SDL_Event * event) } return (0); + case SDL_KEYUP: + PrintKey(&event->key.keysym, 0); + return(0); + /* Pass the video resize event through .. */ case SDL_VIDEORESIZE: return (1); @@ -355,9 +428,6 @@ main(int argc, char *argv[]) SDL_GetEventFilter(&old_filterfunc, &old_filterdata); SDL_SetEventFilter(FilterEvents, NULL); - /* Ignore key up events, they don't even get filtered */ - SDL_EventState(SDL_KEYUP, SDL_IGNORE); - /* Loop, waiting for QUIT */ while (SDL_WaitEvent(&event)) { switch (event.type) {