diff --git a/src/drivers/Qt/input.cpp b/src/drivers/Qt/input.cpp index 1180d238..b80007c7 100644 --- a/src/drivers/Qt/input.cpp +++ b/src/drivers/Qt/input.cpp @@ -140,7 +140,7 @@ static void UpdateTopRider(void); static uint32 JSreturn = 0; #include "keyscan.h" -static uint8 g_keyState[SDL_NUM_SCANCODES]; +static uint8_t g_keyState[SDL_NUM_SCANCODES]; static int keyModifier = 0; //static int DIPS = 0; @@ -1321,6 +1321,17 @@ UpdatePhysicalInput() //printf("SDL_Event.type: %i Keysym: %i ScanCode: %i\n", // event.type, event.key.keysym.sym, event.key.keysym.scancode ); + #ifdef WIN32 + g_keyState[SDL_SCANCODE_LSHIFT] = win32GetKeyState( SDL_SCANCODE_LSHIFT ); + g_keyState[SDL_SCANCODE_RSHIFT] = win32GetKeyState( SDL_SCANCODE_RSHIFT ); + g_keyState[SDL_SCANCODE_LALT ] = win32GetKeyState( SDL_SCANCODE_LALT ); + g_keyState[SDL_SCANCODE_RALT ] = win32GetKeyState( SDL_SCANCODE_RALT ); + g_keyState[SDL_SCANCODE_LCTRL ] = win32GetKeyState( SDL_SCANCODE_LCTRL ); + g_keyState[SDL_SCANCODE_RCTRL ] = win32GetKeyState( SDL_SCANCODE_RCTRL ); + g_keyState[SDL_SCANCODE_LGUI ] = win32GetKeyState( SDL_SCANCODE_LGUI ); + g_keyState[SDL_SCANCODE_RGUI ] = win32GetKeyState( SDL_SCANCODE_RGUI ); + #endif + keyModifier = event.key.keysym.mod; if ( (event.key.keysym.mod & KMOD_LSHIFT) == 0 ) diff --git a/src/drivers/Qt/keyscan.cpp b/src/drivers/Qt/keyscan.cpp index 732bebae..daa80ec6 100644 --- a/src/drivers/Qt/keyscan.cpp +++ b/src/drivers/Qt/keyscan.cpp @@ -1294,6 +1294,45 @@ int convKeyEvent2Sequence( QKeyEvent *event ) return (m | k); } +#ifdef WIN32 +uint8_t win32GetKeyState( unsigned int vkey ) +{ + uint8_t state = 0; + + switch ( vkey ) + { + case SDL_SCANCODE_LSHIFT: + state = (keyBuf[VK_LSHIFT] & 0x80) ? 1 : 0; + break; + case SDL_SCANCODE_RSHIFT: + state = (keyBuf[VK_RSHIFT] & 0x80) ? 1 : 0; + break; + case SDL_SCANCODE_LALT: + state = (keyBuf[VK_LMENU] & 0x80) ? 1 : 0; + break; + case SDL_SCANCODE_RALT: + state = (keyBuf[VK_RMENU] & 0x80) ? 1 : 0; + break; + case SDL_SCANCODE_LCTRL: + state = (keyBuf[VK_LCONTROL] & 0x80) ? 1 : 0; + break; + case SDL_SCANCODE_RCTRL: + state = (keyBuf[VK_RCONTROL] & 0x80) ? 1 : 0; + break; + case SDL_SCANCODE_LGUI: + state = (keyBuf[VK_LWIN] & 0x80) ? 1 : 0; + break; + case SDL_SCANCODE_RGUI: + state = (keyBuf[VK_RWIN] & 0x80) ? 1 : 0; + break; + default: + state = 0; + break; + } + return state; +} +#endif + int pushKeyEvent(QKeyEvent *event, int pressDown) { SDL_Event sdlev; diff --git a/src/drivers/Qt/keyscan.h b/src/drivers/Qt/keyscan.h index 33305db1..4eed7d8a 100644 --- a/src/drivers/Qt/keyscan.h +++ b/src/drivers/Qt/keyscan.h @@ -57,3 +57,7 @@ SDL_Keymod convQtKey2SDLModifier( Qt::KeyboardModifiers m ); int convKeyEvent2Sequence( QKeyEvent *event ); int pushKeyEvent( QKeyEvent *event, int pressDown ); + +#ifdef WIN32 +uint8_t win32GetKeyState( unsigned int vkey ); +#endif