From: Ross Lagerwall Date: Mon, 27 Feb 2023 17:33:08 +0000 (+0000) Subject: ps2: Don't send key release event for Lang1, Lang2 keys X-Git-Tag: v8.0.0-rc1~9^2~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=92f4a21d912cd4618a2951c645b3d27d3c8a6b21;p=thirdparty%2Fqemu.git 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 Signed-off-by: Daniel P. Berrangé --- diff --git a/hw/input/ps2.c b/hw/input/ps2.c index 3253ab6a92c..45af76a8378 100644 --- a/hw/input/ps2.c +++ b/hw/input/ps2.c @@ -402,6 +402,9 @@ static void ps2_keyboard_event(DeviceState *dev, QemuConsole *src, ps2_put_keycode(s, 0xaa); } } + } else if ((qcode == Q_KEY_CODE_LANG1 || qcode == Q_KEY_CODE_LANG2) + && !key->down) { + /* Ignore release for these keys */ } else { if (qcode < qemu_input_map_qcode_to_atset1_len) { keycode = qemu_input_map_qcode_to_atset1[qcode]; @@ -497,6 +500,9 @@ static void ps2_keyboard_event(DeviceState *dev, QemuConsole *src, ps2_put_keycode(s, 0x12); } } + } else if ((qcode == Q_KEY_CODE_LANG1 || qcode == Q_KEY_CODE_LANG2) && + !key->down) { + /* Ignore release for these keys */ } else { if (qcode < qemu_input_map_qcode_to_atset2_len) { keycode = qemu_input_map_qcode_to_atset2[qcode];