diff --git a/src/backend/gdi.c b/src/backend/gdi.c index 248a59b8..6ae65603 100644 --- a/src/backend/gdi.c +++ b/src/backend/gdi.c @@ -265,7 +265,9 @@ static LRESULT CALLBACK wndproc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { if(HIBYTE(VkKeyScan(wp)) & 2) n |= MwKEY_CONTROL_FLAG; if(msg == WM_SYSCHAR) n |= MwKEY_ALT_FLAG; - if((0x20 <= n && n <= 0x7f) || (n & MwKEY_FLAG)) MwLLDispatch(u->ll, key, &n); + if((0x20 <= n && n <= 0x7f) || (n & MwKEY_FLAG)) { + MwLLDispatch(u->ll, key, &n); + } break; } case WM_SETFOCUS: @@ -322,6 +324,17 @@ static LRESULT CALLBACK wndproc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { break; } + if(n == -1 && (msg == WM_KEYUP || msg == WM_SYSKEYUP)) { + WORD ch; + BYTE state[256]; + + GetKeyboardState(state); + + if(ToAscii(wp, HIWORD(lp) & 0xff, state, &ch, 0)) { + n = ch; + } + } + if((msg == WM_SYSKEYDOWN || msg == WM_SYSKEYUP) && n != -1 && wp != VK_MENU) { n |= MwKEY_ALT_FLAG; }