From e2cc12132765c41442fc0657927cf2e83ae690c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Bernon?= Date: Thu, 6 May 2021 12:03:15 +0200 Subject: [PATCH] user32: Adjust ToUnicodeEx control code translation. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit To match VkKeyScanW and pass corresponding tests. Signed-off-by: RĂ©mi Bernon Signed-off-by: Alexandre Julliard --- dlls/user32/input.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/dlls/user32/input.c b/dlls/user32/input.c index 2ee1df729a5..adeb4f66804 100644 --- a/dlls/user32/input.c +++ b/dlls/user32/input.c @@ -1323,8 +1323,11 @@ INT WINAPI ToUnicodeEx( UINT virt, UINT scan, const BYTE *state, case VK_OEM_4: buffer[0] = 0x1b; break; case VK_OEM_5: buffer[0] = 0x1c; break; case VK_OEM_6: buffer[0] = 0x1d; break; - case VK_SUBTRACT: buffer[0] = 0x1e; break; + case '6': buffer[0] = shift ? 0x1e : 0; break; + case VK_OEM_MINUS: buffer[0] = shift ? 0x1f : 0; break; + case VK_BACK: buffer[0] = 0x7f; break; case VK_RETURN: buffer[0] = shift ? 0 : '\n'; break; + case '2': buffer[0] = shift ? 0xffff : 0xf000; break; case VK_SPACE: buffer[0] = ' '; break; default: if (virt >= 'A' && virt <= 'Z') buffer[0] = virt - 'A' + 1; @@ -1335,6 +1338,7 @@ INT WINAPI ToUnicodeEx( UINT virt, UINT scan, const BYTE *state, else buffer[0] = 0; buffer[1] = 0; len = wcslen( buffer ); + if (buffer[0] == 0xffff) buffer[0] = 0; lstrcpynW( str, buffer, size ); TRACE_(keyboard)( "ret %d, str %s.\n", len, debugstr_w(str) );