aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoss Lagerwall <ross.lagerwall@citrix.com>2023-02-27 17:33:08 +0000
committerDaniel P. Berrangé <berrange@redhat.com>2023-03-14 13:41:21 +0000
commit92f4a21d912cd4618a2951c645b3d27d3c8a6b21 (patch)
tree9178210f57b3c3d6d875216f0f780dc411bbd156
parentac19b51678bd8e45ca2e44c062e4191bf8c48505 (diff)
downloadqemu-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.c6
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];