Merged r4874:4875 from branches/SDL-1.2: testwm keyboard debug output.
--- a/test/testwm.c Sun Jan 10 18:19:35 2010 +0000
+++ b/test/testwm.c Sun Jan 10 18:25:04 2010 +0000
@@ -175,6 +175,74 @@
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 @@
return (0);
case SDL_KEYDOWN:
+ PrintKey(&event->key.keysym, 1);
if (event->key.keysym.sym == SDLK_ESCAPE) {
HotKey_Quit();
}
@@ -247,6 +316,10 @@
}
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 @@
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) {