diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 9c4eba25bcbeb72a58b27724f1b689b204fcbde4..783c46a33b554007fe1f2a52f2a9d54572b9cefc 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -2916,7 +2916,8 @@ BOOL LLViewerWindow::handleKey(KEY key, MASK mask)
                     // ToUnicodeEx changes buffer state on OS below Win10, which is undesirable,
                     // but since we already did a TranslateMessage() in gatherInput(), this
                     // should have no negative effect
-                    int res = ToUnicodeEx(key, 0, keyboard_state, chars, char_count, 1 << 2 /*do not modify buffer flag*/, layout);
+                    // ToUnicodeEx works with virtual key codes
+                    int res = ToUnicodeEx(raw_key, 0, keyboard_state, chars, char_count, 1 << 2 /*do not modify buffer flag*/, layout);
                     if (res == 1 && chars[0] >= 0x20)
                     {
                         // Let it fall through to character handler and get a WM_CHAR.