Rémi Bernon : user32: Adjust ToUnicodeEx control code translation.

Alexandre Julliard julliard at winehq.org
Thu May 6 14:56:20 CDT 2021


Module: wine
Branch: master
Commit: e2cc12132765c41442fc0657927cf2e83ae690c2
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=e2cc12132765c41442fc0657927cf2e83ae690c2

Author: Rémi Bernon <rbernon at codeweavers.com>
Date:   Thu May  6 12:03:15 2021 +0200

user32: Adjust ToUnicodeEx control code translation.

To match VkKeyScanW and pass corresponding tests.

Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 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) );




More information about the wine-cvs mailing list