@samitouri / QOSamiQemu / commits / 4e13fca4c9

ui/vnc: Use Linux key codes

QemuInputEvent now stores Linux key codes for key events. Use those codes directly instead of translating between internal key code representations. Signed-off-by: Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Message-ID: <20260520-input-v3-26-7c9e4c7abe34@rsg.ci.i.u-tokyo.ac.jp>

Akihiko Odaki committed May 20, 2026 at 15:48 UTC 4e13fca4c907e9f548592cadd509a449e1fec078
1 file changed +13 -16
ui/vnc.c
+13 -16
@@ -43,6 +43,7 @@
43 #include "qapi/qapi-events-ui.h"
44 #include "qapi/error.h"
45 #include "qapi/qapi-commands-ui.h"
46 +#include "standard-headers/linux/input-event-codes.h"
47 #include "ui/console.h"
48 #include "ui/input.h"
49 #include "crypto/hash.h"
@@ -1797,13 +1798,10 @@ static void pointer_event(VncState *vs, int button_mask, int x, int y)
1798 qemu_input_event_sync();
1799 }
1800
1800 -static void press_key(VncState *vs, QKeyCode qcode)
1801 +static void press_key(VncState *vs, unsigned int lnx)
1802 {
1802 - qkbd_state_key_event(vs->vd->kbd, qemu_input_map_qcode_to_linux[qcode],
1803 - true);
1804 -
1805 - qkbd_state_key_event(vs->vd->kbd, qemu_input_map_qcode_to_linux[qcode],
1806 - false);
1803 + qkbd_state_key_event(vs->vd->kbd, lnx, true);
1804 + qkbd_state_key_event(vs->vd->kbd, lnx, false);
1805 }
1806
1807 static void vnc_led_state_change(VncState *vs)
@@ -1844,15 +1842,15 @@ static void kbd_leds(void *opaque, int ledstate)
1842
1843 static void do_key_event(VncState *vs, int down, int keycode, int sym)
1844 {
1847 - QKeyCode qcode = qemu_input_key_number_to_qcode(keycode);
1845 + unsigned int lnx = qemu_input_key_number_to_linux(keycode);
1846
1847 /* QEMU console switch */
1850 - switch (qcode) {
1851 - case Q_KEY_CODE_1 ... Q_KEY_CODE_9: /* '1' to '9' keys */
1848 + switch (lnx) {
1849 + case KEY_1 ... KEY_9: /* '1' to '9' keys */
1850 if (down &&
1851 qkbd_state_modifier_get(vs->vd->kbd, QKBD_MOD_CTRL) &&
1852 qkbd_state_modifier_get(vs->vd->kbd, QKBD_MOD_ALT)) {
1855 - QemuConsole *con = qemu_console_lookup_by_index(qcode - Q_KEY_CODE_1);
1853 + QemuConsole *con = qemu_console_lookup_by_index(lnx - KEY_1);
1854 if (con) {
1855 qemu_console_unregister_listener(&vs->vd->dcl);
1856 qkbd_state_switch_console(vs->vd->kbd, con);
@@ -1877,12 +1875,12 @@ static void do_key_event(VncState *vs, int down, int keycode, int sym)
1875 if (keysym_is_numlock(vs->vd->kbd_layout, sym & 0xFFFF)) {
1876 if (!qkbd_state_modifier_get(vs->vd->kbd, QKBD_MOD_NUMLOCK)) {
1877 trace_vnc_key_sync_numlock(true);
1880 - press_key(vs, Q_KEY_CODE_NUM_LOCK);
1878 + press_key(vs, KEY_NUMLOCK);
1879 }
1880 } else {
1881 if (qkbd_state_modifier_get(vs->vd->kbd, QKBD_MOD_NUMLOCK)) {
1882 trace_vnc_key_sync_numlock(false);
1885 - press_key(vs, Q_KEY_CODE_NUM_LOCK);
1883 + press_key(vs, KEY_NUMLOCK);
1884 }
1885 }
1886 }
@@ -1900,18 +1898,17 @@ static void do_key_event(VncState *vs, int down, int keycode, int sym)
1898 if (capslock) {
1899 if (uppercase == shift) {
1900 trace_vnc_key_sync_capslock(false);
1903 - press_key(vs, Q_KEY_CODE_CAPS_LOCK);
1901 + press_key(vs, KEY_CAPSLOCK);
1902 }
1903 } else {
1904 if (uppercase != shift) {
1905 trace_vnc_key_sync_capslock(true);
1908 - press_key(vs, Q_KEY_CODE_CAPS_LOCK);
1906 + press_key(vs, KEY_CAPSLOCK);
1907 }
1908 }
1909 }
1910
1913 - qkbd_state_key_event(vs->vd->kbd, qemu_input_map_qcode_to_linux[qcode],
1914 - down);
1911 + qkbd_state_key_event(vs->vd->kbd, lnx, down);
1912 if (QEMU_IS_TEXT_CONSOLE(vs->vd->dcl.con)) {
1913 QemuTextConsole *con = QEMU_TEXT_CONSOLE(vs->vd->dcl.con);
1914 bool numlock = qkbd_state_modifier_get(vs->vd->kbd, QKBD_MOD_NUMLOCK);