diff options
author | Ross Lagerwall <ross.lagerwall@citrix.com> | 2023-02-27 17:33:08 +0000 |
---|---|---|
committer | Daniel P. Berrangé <berrange@redhat.com> | 2023-03-14 13:41:21 +0000 |
commit | 92f4a21d912cd4618a2951c645b3d27d3c8a6b21 (patch) | |
tree | 9178210f57b3c3d6d875216f0f780dc411bbd156 | |
parent | ac19b51678bd8e45ca2e44c062e4191bf8c48505 (diff) | |
download | qemu-92f4a21d912cd4618a2951c645b3d27d3c8a6b21.zip qemu-92f4a21d912cd4618a2951c645b3d27d3c8a6b21.tar.gz qemu-92f4a21d912cd4618a2951c645b3d27d3c8a6b21.tar.bz2 |
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 <ross.lagerwall@citrix.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
-rw-r--r-- | hw/input/ps2.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/hw/input/ps2.c b/hw/input/ps2.c index 3253ab6..45af76a 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]; |