Skip to content

Commit 92f4a21

Browse files
rosslagerwallberrange
authored andcommitted
ps2: Don't send key release event for Lang1, Lang2 keys
The scancodes for the Lang1 and Lang2 keys (i.e. Hangeul, Hanja) are special since they already have the 0x80 bit set which is commonly used to indicate a key release in AT set 1. Reportedly, real hardware does not send a key release scancode. So, skip sending a release for these keys. This ensures that Windows behaves correctly and interprets it as a single keypress rather than two consecutive keypresses. Signed-off-by: Ross Lagerwall <[email protected]> Signed-off-by: Daniel P. Berrangé <[email protected]>
1 parent ac19b51 commit 92f4a21

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

hw/input/ps2.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -402,6 +402,9 @@ static void ps2_keyboard_event(DeviceState *dev, QemuConsole *src,
402402
ps2_put_keycode(s, 0xaa);
403403
}
404404
}
405+
} else if ((qcode == Q_KEY_CODE_LANG1 || qcode == Q_KEY_CODE_LANG2)
406+
&& !key->down) {
407+
/* Ignore release for these keys */
405408
} else {
406409
if (qcode < qemu_input_map_qcode_to_atset1_len) {
407410
keycode = qemu_input_map_qcode_to_atset1[qcode];
@@ -497,6 +500,9 @@ static void ps2_keyboard_event(DeviceState *dev, QemuConsole *src,
497500
ps2_put_keycode(s, 0x12);
498501
}
499502
}
503+
} else if ((qcode == Q_KEY_CODE_LANG1 || qcode == Q_KEY_CODE_LANG2) &&
504+
!key->down) {
505+
/* Ignore release for these keys */
500506
} else {
501507
if (qcode < qemu_input_map_qcode_to_atset2_len) {
502508
keycode = qemu_input_map_qcode_to_atset2[qcode];

0 commit comments

Comments
 (0)