Discussion:
[SDL] SDL_GetKeyboardState bug ? Key stuck after window moved
sgrsgsrg
2016-09-11 19:29:45 UTC
Permalink
I noticed a strange thing and wondered if it's a SDL bug : when my app have the focus, I press a key, then while keeping this key pressend, I move the window. Now, the state for this key is always stuck to 1, and I didnt found a way to stop it.
My event code isn't special, I just do :

int keystate = SDL_GetKeyboardState(NULL);

at the game initialization, then i retrieve the key state with keystate[code]...
sgrsgsrg
2016-09-12 21:24:03 UTC
Permalink
the bug is 100% reproductible, when you keep pressing a key while moving the window, release it BEFORE you release the mouse button
sgrsgsrg
2016-09-13 08:50:19 UTC
Permalink
Windows 10.

SDL2.0.4, compiled under Visual Studio 2013

I currently tested only with the left & right keys. (SDL_SCANCODE_LEFT, SDL_SCANCODE_RIGHT)


To reproduce the problem :
- press a key
- while keeping this key pressed, move the window with your mouse
- release the key
- release the mouse click to stop moving the window
-> the key state for this key will be stuck forever


If you release the key after you stopped moving the window, the problem does not occurs
sgrsgsrg
2016-09-14 20:53:19 UTC
Permalink
Some news.

The only way i found to reset a stuck key is to make the window lose then gain its focus.

This code will force focus change if a key was pressed while the window was moved, thus correcting the stucked key glitch


Code:

while (SDL_PollEvent(&e)) {
switch (e.type){
if (e.window.event == SDL_WINDOWEVENT_MOVED) {
// check if a key was already pressed
int sdl_bug = 0;
for (int i = 0; i < 7; i++){ // the 7 keyboard keys i use in my game
if (keys[i]){
sdl_bug = 1;
}
}
if (sdl_bug){ // hack
SDL_MinimizeWindow(window);
SDL_RestoreWindow(window);
}
}
}
}




Hacks are ugly, it'd be nice if some investigation could be done

Loading...