# HG changeset patch # User Sam Lantinga # Date 1254121465 0 # Node ID 14195cfdb66e9bd406624a27a5aa3f43ebe66381 # Parent ba587a51f899936929b3bc93704aa08e7c367a03 Added keyboard output for debugging bug #659 diff -r ba587a51f899 -r 14195cfdb66e test/testwm.c --- a/test/testwm.c Mon Sep 28 06:23:22 2009 +0000 +++ b/test/testwm.c Mon Sep 28 07:04:25 2009 +0000 @@ -168,6 +168,71 @@ 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"); +} + int SDLCALL FilterEvents(const SDL_Event *event) { static int reallyquit = 0; @@ -217,6 +282,7 @@ return(0); case SDL_KEYDOWN: + PrintKey(&event->key.keysym, 1); if ( event->key.keysym.sym == SDLK_ESCAPE ) { HotKey_Quit(); } @@ -234,6 +300,10 @@ } return(0); + case SDL_KEYUP: + PrintKey(&event->key.keysym, 0); + return(0); + /* Pass the video resize event through .. */ case SDL_VIDEORESIZE: return(1); @@ -346,9 +416,6 @@ /* Set an event filter that discards everything but QUIT */ SDL_SetEventFilter(FilterEvents); - /* 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) {