@@ -5787,7 +5787,12 @@ void DisplayServerWindows::_process_key_events() {
5787
5787
if (!(ke.lParam & (1 << 24 )) && ToUnicodeEx (extended_code, (ke.lParam >> 16 ) & 0xFF , keyboard_state, chars, 255 , 4 , GetKeyboardLayout (0 )) > 0 ) {
5788
5788
String keysym = String::utf16 ((char16_t *)chars, 255 );
5789
5789
if (!keysym.is_empty ()) {
5790
- key_label = fix_key_label (keysym[0 ], keycode);
5790
+ char32_t unicode_value = keysym[0 ];
5791
+ // For printable ASCII characters (0x20-0x7E), override the original keycode with the character value.
5792
+ if (Key::SPACE <= (Key)unicode_value && (Key)unicode_value <= Key::ASCIITILDE) {
5793
+ keycode = fix_keycode (unicode_value, (Key)unicode_value);
5794
+ }
5795
+ key_label = fix_key_label (unicode_value, keycode);
5791
5796
}
5792
5797
}
5793
5798
@@ -5843,7 +5848,12 @@ void DisplayServerWindows::_process_key_events() {
5843
5848
if (!(ke.lParam & (1 << 24 )) && ToUnicodeEx (extended_code, (ke.lParam >> 16 ) & 0xFF , keyboard_state, chars, 255 , 4 , GetKeyboardLayout (0 )) > 0 ) {
5844
5849
String keysym = String::utf16 ((char16_t *)chars, 255 );
5845
5850
if (!keysym.is_empty ()) {
5846
- key_label = fix_key_label (keysym[0 ], keycode);
5851
+ char32_t unicode_value = keysym[0 ];
5852
+ // For printable ASCII characters (0x20-0x7E), override the original keycode with the character value.
5853
+ if (Key::SPACE <= (Key)unicode_value && (Key)unicode_value <= Key::ASCIITILDE) {
5854
+ keycode = fix_keycode (unicode_value, (Key)unicode_value);
5855
+ }
5856
+ key_label = fix_key_label (unicode_value, keycode);
5847
5857
}
5848
5858
}
5849
5859
0 commit comments