From: Rémi Bernon rbernon@codeweavers.com
And to ImmTranslateMessage if they have been processed. --- dlls/imm32/tests/imm32.c | 2 +- dlls/win32u/message.c | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/dlls/imm32/tests/imm32.c b/dlls/imm32/tests/imm32.c index cb2e687af05..d9a74740c68 100644 --- a/dlls/imm32/tests/imm32.c +++ b/dlls/imm32/tests/imm32.c @@ -7243,7 +7243,7 @@ static void test_ImmTranslateMessage( BOOL kbd_char_first ) keybd_event( 'Q', 0x10, KEYEVENTF_KEYUP, 0 ); flush_events(); process_messages_( hwnd ); - todo_wine ok_seq( key_up_seq ); + ok_seq( key_up_seq ); }
diff --git a/dlls/win32u/message.c b/dlls/win32u/message.c index 2b6df6cc72c..0c33b713f72 100644 --- a/dlls/win32u/message.c +++ b/dlls/win32u/message.c @@ -2397,7 +2397,7 @@ static BOOL process_keyboard_message( MSG *msg, UINT hw_id, HWND hwnd_filter, } msg->pt = point_phys_to_win_dpi( msg->hwnd, msg->pt );
- if (remove && msg->message == WM_KEYDOWN) + if (remove && (msg->message == WM_KEYDOWN || msg->message == WM_KEYUP)) if (ImmProcessKey( msg->hwnd, NtUserGetKeyboardLayout(0), msg->wParam, msg->lParam, 0 )) msg->wParam = VK_PROCESSKEY;
@@ -4401,7 +4401,9 @@ BOOL WINAPI NtUserTranslateMessage( const MSG *msg, UINT flags ) if (flags) FIXME( "unsupported flags %x\n", flags );
if (msg->message < WM_KEYFIRST || msg->message > WM_KEYLAST) return FALSE; - if (msg->message != WM_KEYDOWN && msg->message != WM_SYSKEYDOWN) return TRUE; + if (msg->message != WM_KEYDOWN && msg->message != WM_SYSKEYDOWN && + msg->message != WM_KEYUP && msg->message != WM_SYSKEYUP) + return TRUE;
TRACE_(key)( "Translating key %s (%04x), scancode %04x\n", debugstr_vkey_name( msg->wParam ), LOWORD(msg->wParam), HIWORD(msg->lParam) );