Merged r4874:4875 from branches/SDL-1.2: testwm keyboard debug output.
authorRyan C. Gordon <icculus@icculus.org>
Sun, 10 Jan 2010 18:25:04 +0000
changeset 3634 1e31a24c41a6
parent 3633 81dde1b00bf1
child 3635 5ea5e4e6103f
Merged r4874:4875 from branches/SDL-1.2: testwm keyboard debug output.
test/testwm.c
--- 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) {