Skip to content

Commit

Permalink
Fixed bug #322
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
slouken committed Jul 6, 2007
1 parent 0fa2086 commit 63d9e6c
Showing 1 changed file with 28 additions and 27 deletions.
55 changes: 28 additions & 27 deletions src/video/x11/SDL_x11video.c
Expand Up @@ -1078,33 +1078,6 @@ static int X11_CreateWindow(_THIS, SDL_Surface *screen,
}
}

/* 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);
Expand Down Expand Up @@ -1185,6 +1158,34 @@ SDL_Surface *X11_SetVideoMode(_THIS, SDL_Surface *current,
}
}

/* 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)) ) {
Expand Down

0 comments on commit 63d9e6c

Please sign in to comment.