changeset 4257:14195cfdb66e SDL-1.2

Added keyboard output for debugging bug #659
author Sam Lantinga <slouken@libsdl.org>
date Mon, 28 Sep 2009 07:04:25 +0000
parents ba587a51f899
children ca02f877d055
files test/testwm.c
diffstat 1 files changed, 70 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- 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) {