changeset 4008:a19fd8bcdd52 SDL-1.2

Fixed bug #322 Need to resync the keyboard state every time we set a video mode, since the code in SDL_video.c is clearing the keyboard state.
author Sam Lantinga <slouken@libsdl.org>
date Fri, 06 Jul 2007 07:45:33 +0000
parents 4e4866a72905
children 1146681dbb74
files src/video/x11/SDL_x11video.c
diffstat 1 files changed, 28 insertions(+), 27 deletions(-) [+]
line wrap: on
line diff
--- a/src/video/x11/SDL_x11video.c	Thu Jul 05 07:11:05 2007 +0000
+++ b/src/video/x11/SDL_x11video.c	Fri Jul 06 07:45:33 2007 +0000
@@ -1078,33 +1078,6 @@
 		}
 	}
 
-	/* Update the internal keyboard state */
-	X11_SetKeyboardState(SDL_Display, NULL);
-
-	/* When the window is first mapped, ignore non-modifier keys */
-	{
-		Uint8 *keys = SDL_GetKeyState(NULL);
-		for ( i = 0; i < SDLK_LAST; ++i ) {
-			switch (i) {
-			    case SDLK_NUMLOCK:
-			    case SDLK_CAPSLOCK:
-			    case SDLK_LCTRL:
-			    case SDLK_RCTRL:
-			    case SDLK_LSHIFT:
-			    case SDLK_RSHIFT:
-			    case SDLK_LALT:
-			    case SDLK_RALT:
-			    case SDLK_LMETA:
-			    case SDLK_RMETA:
-			    case SDLK_MODE:
-				break;
-			    default:
-				keys[i] = SDL_RELEASED;
-				break;
-			}
-		}
-	}
-
 	/* Map them both and go fullscreen, if requested */
 	if ( ! SDL_windowid ) {
 		XMapWindow(SDL_Display, SDL_Window);
@@ -1185,6 +1158,34 @@
 		}
 	}
 
+	/* Update the internal keyboard state */
+	X11_SetKeyboardState(SDL_Display, NULL);
+
+	/* When the window is first mapped, ignore non-modifier keys */
+	if ( !current->w && !current->h ) {
+		Uint8 *keys = SDL_GetKeyState(NULL);
+		int i;
+		for ( i = 0; i < SDLK_LAST; ++i ) {
+			switch (i) {
+			    case SDLK_NUMLOCK:
+			    case SDLK_CAPSLOCK:
+			    case SDLK_LCTRL:
+			    case SDLK_RCTRL:
+			    case SDLK_LSHIFT:
+			    case SDLK_RSHIFT:
+			    case SDLK_LALT:
+			    case SDLK_RALT:
+			    case SDLK_LMETA:
+			    case SDLK_RMETA:
+			    case SDLK_MODE:
+				break;
+			    default:
+				keys[i] = SDL_RELEASED;
+				break;
+			}
+		}
+	}
+
 	/* Set up the new mode framebuffer */
 	if ( ((current->w != width) || (current->h != height)) ||
              ((saved_flags&SDL_OPENGL) != (flags&SDL_OPENGL)) ) {