diff --git a/changelog.txt b/changelog.txt index de4c7653..a65d9058 100644 --- a/changelog.txt +++ b/changelog.txt @@ -31,6 +31,7 @@ FIX: Minor code improvements FEATURE: Add cmake support FIX: Add missing driver.mk to SSD1322 driver. FEATURE: LGDP4532 driver improvements. +FIX: Win32 Keyboard driver now retrieves lock key states on window activate *** Release 2.9 *** diff --git a/drivers/multiple/Win32/gdisp_lld_Win32.c b/drivers/multiple/Win32/gdisp_lld_Win32.c index d8af120c..225c109e 100644 --- a/drivers/multiple/Win32/gdisp_lld_Win32.c +++ b/drivers/multiple/Win32/gdisp_lld_Win32.c @@ -647,12 +647,30 @@ static LRESULT myWindowProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) #endif #if GFX_USE_GINPUT && GINPUT_NEED_KEYBOARD + case WM_ACTIVATE: + // Copy the lock key states into the uGFX keyboard as it might have changed while we were away + // For simplicity we do this on both activate and deactivate. + if (keyboard && keyboard->pLayout) { + if (GetKeyState(VK_NUMLOCK) & 1) + keyboard->keystate |= GKEYSTATE_NUMLOCK; + else + keyboard->keystate &= ~GKEYSTATE_NUMLOCK; + if (GetKeyState(VK_CAPITAL) & 1) + keyboard->keystate |= GKEYSTATE_CAPSLOCK; + else + keyboard->keystate &= ~GKEYSTATE_CAPSLOCK; + if (GetKeyState(VK_SCROLL) & 1) + keyboard->keystate |= GKEYSTATE_SCROLLLOCK; + else + keyboard->keystate &= ~GKEYSTATE_SCROLLLOCK; + } + break; case WM_SYSKEYDOWN: case WM_SYSKEYUP: case WM_KEYDOWN: case WM_KEYUP: // A layout is being used: Send scan codes to the keyboard buffer - if (keyboard && keyboard->pLayout && keypos < (int)sizeof(keybuffer)-1 && (wParam & 0xFF) > 0x01) { + if (keyboard && keyboard->pLayout && keypos < (int)sizeof(keybuffer)-1 && (wParam & 0xFF) >= VK_BACK) { if (Msg == WM_KEYUP || Msg == WM_SYSKEYUP) keybuffer[keypos++] = 0x00; // Keyup else if (HIWORD(lParam) & KF_REPEAT)