Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/812831/?format=api
{ "id": 812831, "url": "http://patchwork.ozlabs.org/api/patches/812831/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20170912123744.14730-12-berrange@redhat.com/", "project": { "id": 14, "url": "http://patchwork.ozlabs.org/api/projects/14/?format=api", "name": "QEMU Development", "link_name": "qemu-devel", "list_id": "qemu-devel.nongnu.org", "list_email": "qemu-devel@nongnu.org", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20170912123744.14730-12-berrange@redhat.com>", "list_archive_url": null, "date": "2017-09-12T12:37:43", "name": "[v5,11/12] ui: convert GTK and SDL1 frontends to keycodemapdb", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "1519c57f894255c3dddfb5fac8a75ca0747c24d9", "submitter": { "id": 2694, "url": "http://patchwork.ozlabs.org/api/people/2694/?format=api", "name": "Daniel P. Berrangé", "email": "berrange@redhat.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20170912123744.14730-12-berrange@redhat.com/mbox/", "series": [ { "id": 2692, "url": "http://patchwork.ozlabs.org/api/series/2692/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=2692", "date": "2017-09-12T12:37:33", "name": "Convert over to use keycodemapdb", "version": 5, "mbox": "http://patchwork.ozlabs.org/series/2692/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/812831/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/812831/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@bilbo.ozlabs.org", "Authentication-Results": [ "ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=nongnu.org\n\t(client-ip=208.118.235.17; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n\treceiver=<UNKNOWN>)", "ext-mx01.extmail.prod.ext.phx2.redhat.com;\n\tdmarc=none (p=none dis=none) header.from=redhat.com", "ext-mx01.extmail.prod.ext.phx2.redhat.com;\n\tspf=fail smtp.mailfrom=berrange@redhat.com" ], "Received": [ "from lists.gnu.org (lists.gnu.org [208.118.235.17])\n\t(using TLSv1 with cipher AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xs4XL5tmrz9s82\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue, 12 Sep 2017 22:55:29 +1000 (AEST)", "from localhost ([::1]:35619 helo=lists.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1drkbQ-0000cR-1h\n\tfor incoming@patchwork.ozlabs.org; Tue, 12 Sep 2017 08:47:44 -0400", "from eggs.gnu.org ([2001:4830:134:3::10]:48826)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <berrange@redhat.com>) id 1drkST-00013L-4U\n\tfor qemu-devel@nongnu.org; Tue, 12 Sep 2017 08:38:45 -0400", "from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <berrange@redhat.com>) id 1drkS7-0003VA-L5\n\tfor qemu-devel@nongnu.org; Tue, 12 Sep 2017 08:38:29 -0400", "from mx1.redhat.com ([209.132.183.28]:37172)\n\tby eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)\n\t(Exim 4.71) (envelope-from <berrange@redhat.com>) id 1drkS7-0003UW-00\n\tfor qemu-devel@nongnu.org; Tue, 12 Sep 2017 08:38:07 -0400", "from smtp.corp.redhat.com\n\t(int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby mx1.redhat.com (Postfix) with ESMTPS id 1BC4981DFF\n\tfor <qemu-devel@nongnu.org>; Tue, 12 Sep 2017 12:38:06 +0000 (UTC)", "from localhost.localdomain.com (unknown [10.42.22.189])\n\tby smtp.corp.redhat.com (Postfix) with ESMTP id 264A277D65;\n\tTue, 12 Sep 2017 12:38:05 +0000 (UTC)" ], "DMARC-Filter": "OpenDMARC Filter v1.3.2 mx1.redhat.com 1BC4981DFF", "From": "\"Daniel P. Berrange\" <berrange@redhat.com>", "To": "qemu-devel@nongnu.org", "Date": "Tue, 12 Sep 2017 13:37:43 +0100", "Message-Id": "<20170912123744.14730-12-berrange@redhat.com>", "In-Reply-To": "<20170912123744.14730-1-berrange@redhat.com>", "References": "<20170912123744.14730-1-berrange@redhat.com>", "X-Scanned-By": "MIMEDefang 2.79 on 10.5.11.12", "X-Greylist": "Sender IP whitelisted, not delayed by milter-greylist-4.5.16\n\t(mx1.redhat.com [10.5.110.25]);\n\tTue, 12 Sep 2017 12:38:06 +0000 (UTC)", "X-detected-operating-system": "by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]\n\t[fuzzy]", "X-Received-From": "209.132.183.28", "Subject": "[Qemu-devel] [PATCH v5 11/12] ui: convert GTK and SDL1 frontends to\n\tkeycodemapdb", "X-BeenThere": "qemu-devel@nongnu.org", "X-Mailman-Version": "2.1.21", "Precedence": "list", "List-Id": "<qemu-devel.nongnu.org>", "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>", "List-Archive": "<http://lists.nongnu.org/archive/html/qemu-devel/>", "List-Post": "<mailto:qemu-devel@nongnu.org>", "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>", "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=subscribe>", "Cc": "Gerd Hoffmann <kraxel@redhat.com>", "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org", "Sender": "\"Qemu-devel\"\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>" }, "content": "The x_keycode_to_pc_keycode and evdev_keycode_to_pc_keycode\ntables are replaced with automatically generated tables.\nIn addition the X11 heuristics are improved to detect running\non XQuartz and XWin X11 servers, to activate the correct OS-X\nand Win32 keycode maps.\n\nSigned-off-by: Daniel P. Berrange <berrange@redhat.com>\n---\n include/ui/input.h | 21 ++\n ui/Makefile.objs | 12 +-\n ui/gtk.c | 205 +++++++++------\n ui/input-keymap-atset1-to-qcode.c | 245 +++++++++++++++++\n ui/input-keymap-win32-to-qcode.c | 157 +++++++++++\n ui/input-keymap-x11-to-qcode.c | 163 ++++++++++++\n ui/input-keymap-xorgevdev-to-qcode.c | 463 +++++++++++++++++++++++++++++++++\n ui/input-keymap-xorgkbd-to-qcode.c | 122 +++++++++\n ui/input-keymap-xorgxquartz-to-qcode.c | 128 +++++++++\n ui/input-keymap-xorgxwin-to-qcode.c | 122 +++++++++\n ui/input-keymap.c | 7 +\n ui/sdl.c | 105 +++-----\n ui/trace-events | 9 +-\n ui/x_keymap.c | 250 +++++++-----------\n ui/x_keymap.h | 8 +-\n 15 files changed, 1700 insertions(+), 317 deletions(-)\n create mode 100644 ui/input-keymap-atset1-to-qcode.c\n create mode 100644 ui/input-keymap-win32-to-qcode.c\n create mode 100644 ui/input-keymap-x11-to-qcode.c\n create mode 100644 ui/input-keymap-xorgevdev-to-qcode.c\n create mode 100644 ui/input-keymap-xorgkbd-to-qcode.c\n create mode 100644 ui/input-keymap-xorgxquartz-to-qcode.c\n create mode 100644 ui/input-keymap-xorgxwin-to-qcode.c", "diff": "diff --git a/include/ui/input.h b/include/ui/input.h\nindex dcf7e0e731..1c1731ef18 100644\n--- a/include/ui/input.h\n+++ b/include/ui/input.h\n@@ -68,6 +68,9 @@ void qemu_input_check_mode_change(void);\n void qemu_add_mouse_mode_change_notifier(Notifier *notify);\n void qemu_remove_mouse_mode_change_notifier(Notifier *notify);\n \n+extern const guint qemu_input_map_atset1_to_qcode_len;\n+extern const guint16 qemu_input_map_atset1_to_qcode[];\n+\n extern const guint qemu_input_map_linux_to_qcode_len;\n extern const guint16 qemu_input_map_linux_to_qcode[];\n \n@@ -101,4 +104,22 @@ extern const guint16 qemu_input_map_qnum_to_qcode[];\n extern const guint qemu_input_map_usb_to_qcode_len;\n extern const guint16 qemu_input_map_usb_to_qcode[];\n \n+extern const guint qemu_input_map_win32_to_qcode_len;\n+extern const guint16 qemu_input_map_win32_to_qcode[];\n+\n+extern const guint qemu_input_map_x11_to_qcode_len;\n+extern const guint16 qemu_input_map_x11_to_qcode[];\n+\n+extern const guint qemu_input_map_xorgevdev_to_qcode_len;\n+extern const guint16 qemu_input_map_xorgevdev_to_qcode[];\n+\n+extern const guint qemu_input_map_xorgkbd_to_qcode_len;\n+extern const guint16 qemu_input_map_xorgkbd_to_qcode[];\n+\n+extern const guint qemu_input_map_xorgxquartz_to_qcode_len;\n+extern const guint16 qemu_input_map_xorgxquartz_to_qcode[];\n+\n+extern const guint qemu_input_map_xorgxwin_to_qcode_len;\n+extern const guint16 qemu_input_map_xorgxwin_to_qcode[];\n+\n #endif /* INPUT_H */\ndiff --git a/ui/Makefile.objs b/ui/Makefile.objs\nindex 7823e85d7c..b6512e3dc2 100644\n--- a/ui/Makefile.objs\n+++ b/ui/Makefile.objs\n@@ -11,11 +11,12 @@ common-obj-y += keymaps.o console.o cursor.o qemu-pixman.o\n common-obj-y += input.o input-keymap.o input-legacy.o\n common-obj-$(CONFIG_LINUX) += input-linux.o\n common-obj-$(CONFIG_SPICE) += spice-core.o spice-input.o spice-display.o\n-common-obj-$(CONFIG_SDL) += sdl.mo x_keymap.o\n+common-obj-$(CONFIG_SDL) += sdl.mo\n common-obj-$(CONFIG_COCOA) += cocoa.o\n common-obj-$(CONFIG_CURSES) += curses.o\n common-obj-$(CONFIG_VNC) += $(vnc-obj-y)\n-common-obj-$(CONFIG_GTK) += gtk.o x_keymap.o\n+common-obj-$(CONFIG_GTK) += gtk.o\n+common-obj-$(if $(CONFIG_WIN32),n,$(if $(CONFIG_SDL),y,$(CONFIG_GTK))) += x_keymap.o\n \n ifeq ($(CONFIG_SDLABI),1.2)\n sdl.mo-objs := sdl.o sdl_zoom.o\n@@ -54,6 +55,7 @@ KEYCODEMAP_GEN = $(SRC_PATH)/ui/keycodemapdb/tools/keymap-gen\n KEYCODEMAP_CSV = $(SRC_PATH)/ui/keycodemapdb/data/keymaps.csv\n \n KEYCODEMAP_FILES = \\\n+\t\t ui/input-keymap-atset1-to-qcode.c \\\n \t\t ui/input-keymap-linux-to-qcode.c \\\n \t\t ui/input-keymap-osx-to-qcode.c \\\n \t\t ui/input-keymap-qcode-to-adb.c \\\n@@ -65,6 +67,12 @@ KEYCODEMAP_FILES = \\\n \t\t ui/input-keymap-qcode-to-sun.c \\\n \t\t ui/input-keymap-qnum-to-qcode.c \\\n \t\t ui/input-keymap-usb-to-qcode.c \\\n+\t\t ui/input-keymap-win32-to-qcode.c \\\n+\t\t ui/input-keymap-x11-to-qcode.c \\\n+\t\t ui/input-keymap-xorgevdev-to-qcode.c \\\n+\t\t ui/input-keymap-xorgkbd-to-qcode.c \\\n+\t\t ui/input-keymap-xorgxquartz-to-qcode.c \\\n+\t\t ui/input-keymap-xorgxwin-to-qcode.c \\\n \t\t $(NULL)\n \n # Generated input-keymap-XXX.c files are kept in GIT, so\ndiff --git a/ui/gtk.c b/ui/gtk.c\nindex 5bd87c265a..398f3aad81 100644\n--- a/ui/gtk.c\n+++ b/ui/gtk.c\n@@ -52,7 +52,6 @@\n #include \"ui/input.h\"\n #include \"sysemu/sysemu.h\"\n #include \"qmp-commands.h\"\n-#include \"x_keymap.h\"\n #include \"keymaps.h\"\n #include \"chardev/char.h\"\n #include \"qom/object.h\"\n@@ -65,6 +64,48 @@\n #define VC_SCALE_MIN 0.25\n #define VC_SCALE_STEP 0.25\n \n+#ifdef GDK_WINDOWING_X11\n+#include \"ui/x_keymap.h\"\n+\n+/* Gtk2 compat */\n+#ifndef GDK_IS_X11_DISPLAY\n+#define GDK_IS_X11_DISPLAY(dpy) (dpy != NULL)\n+#endif\n+#endif\n+\n+\n+#ifdef GDK_WINDOWING_WAYLAND\n+/* Gtk2 compat */\n+#ifndef GDK_IS_WAYLAND_DISPLAY\n+#define GDK_IS_WAYLAND_DISPLAY(dpy) (dpy != NULL)\n+#endif\n+#endif\n+\n+\n+#ifdef GDK_WINDOWING_WIN32\n+/* Gtk2 compat */\n+#ifndef GDK_IS_WIN32_DISPLAY\n+#define GDK_IS_WIN32_DISPLAY(dpy) (dpy != NULL)\n+#endif\n+#endif\n+\n+\n+#ifdef GDK_WINDOWING_BROADWAY\n+/* Gtk2 compat */\n+#ifndef GDK_IS_BROADWAY_DISPLAY\n+#define GDK_IS_BROADWAY_DISPLAY(dpy) (dpy != NULL)\n+#endif\n+#endif\n+\n+\n+#ifdef GDK_WINDOWING_QUARTZ\n+/* Gtk2 compat */\n+#ifndef GDK_IS_QUARTZ_DISPLAY\n+#define GDK_IS_QUARTZ_DISPLAY(dpy) (dpy != NULL)\n+#endif\n+#endif\n+\n+\n #if !defined(CONFIG_VTE)\n # define VTE_CHECK_VERSION(a, b, c) 0\n #endif\n@@ -123,10 +164,19 @@\n #define HOTKEY_MODIFIERS (GDK_CONTROL_MASK | GDK_MOD1_MASK)\n \n static const int modifier_keycode[] = {\n- /* shift, control, alt keys, meta keys, both left & right */\n- 0x2a, 0x36, 0x1d, 0x9d, 0x38, 0xb8, 0xdb, 0xdd,\n+ Q_KEY_CODE_SHIFT,\n+ Q_KEY_CODE_SHIFT_R,\n+ Q_KEY_CODE_CTRL,\n+ Q_KEY_CODE_CTRL_R,\n+ Q_KEY_CODE_ALT,\n+ Q_KEY_CODE_ALT_R,\n+ Q_KEY_CODE_META_L,\n+ Q_KEY_CODE_META_R,\n };\n \n+static const guint16 *keycode_map;\n+static size_t keycode_maplen;\n+\n struct GtkDisplayState {\n GtkWidget *window;\n \n@@ -178,7 +228,6 @@ struct GtkDisplayState {\n bool external_pause_update;\n \n bool modifier_pressed[ARRAY_SIZE(modifier_keycode)];\n- bool has_evdev;\n bool ignore_keys;\n };\n \n@@ -412,18 +461,18 @@ static void gd_update_full_redraw(VirtualConsole *vc)\n static void gtk_release_modifiers(GtkDisplayState *s)\n {\n VirtualConsole *vc = gd_vc_find_current(s);\n- int i, keycode;\n+ int i, qcode;\n \n if (vc->type != GD_VC_GFX ||\n !qemu_console_is_graphic(vc->gfx.dcl.con)) {\n return;\n }\n for (i = 0; i < ARRAY_SIZE(modifier_keycode); i++) {\n- keycode = modifier_keycode[i];\n+ qcode = modifier_keycode[i];\n if (!s->modifier_pressed[i]) {\n continue;\n }\n- qemu_input_event_send_key_number(vc->gfx.dcl.con, keycode, false);\n+ qemu_input_event_send_key_qcode(vc->gfx.dcl.con, qcode, false);\n s->modifier_pressed[i] = false;\n }\n }\n@@ -1057,47 +1106,75 @@ static gboolean gd_scroll_event(GtkWidget *widget, GdkEventScroll *scroll,\n return TRUE;\n }\n \n-static int gd_map_keycode(GtkDisplayState *s, GdkDisplay *dpy, int gdk_keycode)\n+\n+static const guint16 *gd_get_keymap(size_t *maplen)\n {\n- int qemu_keycode;\n+ GdkDisplay *dpy = gdk_display_get_default();\n+\n+#ifdef GDK_WINDOWING_X11\n+ if (GDK_IS_X11_DISPLAY(dpy)) {\n+ trace_gd_keymap_windowing(\"x11\");\n+ return qemu_xkeymap_mapping_table(\n+ gdk_x11_display_get_xdisplay(dpy), maplen);\n+ }\n+#endif\n+\n+#ifdef GDK_WINDOWING_WAYLAND\n+ if (GDK_IS_WAYLAND_DISPLAY(dpy)) {\n+ trace_gd_keymap_windowing(\"wayland\");\n+ *maplen = qemu_input_map_xorgevdev_to_qcode_len;\n+ return qemu_input_map_xorgevdev_to_qcode;\n+ }\n+#endif\n \n #ifdef GDK_WINDOWING_WIN32\n if (GDK_IS_WIN32_DISPLAY(dpy)) {\n- qemu_keycode = MapVirtualKey(gdk_keycode, MAPVK_VK_TO_VSC);\n- switch (qemu_keycode) {\n- case 103: /* alt gr */\n- qemu_keycode = 56 | SCANCODE_GREY;\n- break;\n- }\n- return qemu_keycode;\n+ trace_gd_keymap_windowing(\"win32\");\n+ *maplen = qemu_input_map_win32_to_qcode_len;\n+ return qemu_input_map_win32_to_qcode;\n }\n #endif\n \n- if (gdk_keycode < 9) {\n- qemu_keycode = 0;\n- } else if (gdk_keycode < 97) {\n- qemu_keycode = gdk_keycode - 8;\n-#ifdef GDK_WINDOWING_X11\n- } else if (GDK_IS_X11_DISPLAY(dpy) && gdk_keycode < 158) {\n- if (s->has_evdev) {\n- qemu_keycode = translate_evdev_keycode(gdk_keycode - 97);\n- } else {\n- qemu_keycode = translate_xfree86_keycode(gdk_keycode - 97);\n- }\n+#ifdef GDK_WINDOWING_QUARTZ\n+ if (GDK_IS_QUARTZ_DISPLAY(dpy)) {\n+ trace_gd_keymap_windowing(\"quartz\");\n+ *maplen = qemu_input_map_osx_to_qcode_len;\n+ return qemu_input_map_osx_to_qcode;\n+ }\n #endif\n-#ifdef GDK_WINDOWING_WAYLAND\n- } else if (GDK_IS_WAYLAND_DISPLAY(dpy) && gdk_keycode < 158) {\n- qemu_keycode = translate_evdev_keycode(gdk_keycode - 97);\n+\n+#ifdef GDK_WINDOWING_BROADWAY\n+ if (GDK_IS_BROADWAY_DISPLAY(dpy)) {\n+ trace_gd_keymap_windowing(\"broadway\");\n+ g_warning(\"experimental: using broadway, x11 virtual keysym\\n\"\n+ \"mapping - with very limited support. See also\\n\"\n+ \"https://bugzilla.gnome.org/show_bug.cgi?id=700105\");\n+ *maplen = qemu_input_map_x11_to_qcode_len;\n+ return qemu_input_map_x11_to_qcode;\n+ }\n #endif\n- } else if (gdk_keycode == 208) { /* Hiragana_Katakana */\n- qemu_keycode = 0x70;\n- } else if (gdk_keycode == 211) { /* backslash */\n- qemu_keycode = 0x73;\n- } else {\n- qemu_keycode = 0;\n+\n+ g_warning(\"Unsupported GDK Windowing platform.\\n\"\n+ \"Disabling extended keycode tables.\\n\"\n+ \"Please report to qemu-devel@nongnu.org\\n\"\n+ \"including the following information:\\n\"\n+ \"\\n\"\n+ \" - Operating system\\n\"\n+ \" - GDK Windowing system build\\n\");\n+ return NULL;\n+}\n+\n+\n+static int gd_map_keycode(int scancode)\n+{\n+ if (!keycode_map) {\n+ return 0;\n+ }\n+ if (scancode > keycode_maplen) {\n+ return 0;\n }\n \n- return qemu_keycode;\n+ return keycode_map[scancode];\n }\n \n static gboolean gd_text_key_down(GtkWidget *widget,\n@@ -1111,9 +1188,7 @@ static gboolean gd_text_key_down(GtkWidget *widget,\n } else if (key->length) {\n kbd_put_string_console(con, key->string, key->length);\n } else {\n- int num = gd_map_keycode(vc->s, gtk_widget_get_display(widget),\n- key->hardware_keycode);\n- int qcode = qemu_input_key_number_to_qcode(num);\n+ int qcode = gd_map_keycode(key->hardware_keycode);\n kbd_put_qcode_console(con, qcode);\n }\n return TRUE;\n@@ -1123,8 +1198,7 @@ static gboolean gd_key_event(GtkWidget *widget, GdkEventKey *key, void *opaque)\n {\n VirtualConsole *vc = opaque;\n GtkDisplayState *s = vc->s;\n- int gdk_keycode = key->hardware_keycode;\n- int qemu_keycode;\n+ int qcode;\n int i;\n \n if (s->ignore_keys) {\n@@ -1138,20 +1212,19 @@ static gboolean gd_key_event(GtkWidget *widget, GdkEventKey *key, void *opaque)\n return TRUE;\n }\n \n- qemu_keycode = gd_map_keycode(s, gtk_widget_get_display(widget),\n- gdk_keycode);\n+ qcode = gd_map_keycode(key->hardware_keycode);\n \n- trace_gd_key_event(vc->label, gdk_keycode, qemu_keycode,\n+ trace_gd_key_event(vc->label, key->hardware_keycode, qcode,\n (key->type == GDK_KEY_PRESS) ? \"down\" : \"up\");\n \n for (i = 0; i < ARRAY_SIZE(modifier_keycode); i++) {\n- if (qemu_keycode == modifier_keycode[i]) {\n+ if (qcode == modifier_keycode[i]) {\n s->modifier_pressed[i] = (key->type == GDK_KEY_PRESS);\n }\n }\n \n- qemu_input_event_send_key_number(vc->gfx.dcl.con, qemu_keycode,\n- key->type == GDK_KEY_PRESS);\n+ qemu_input_event_send_key_qcode(vc->gfx.dcl.con, qcode,\n+ key->type == GDK_KEY_PRESS);\n \n return TRUE;\n }\n@@ -2195,38 +2268,6 @@ static void gd_create_menus(GtkDisplayState *s)\n gtk_window_add_accel_group(GTK_WINDOW(s->window), s->accel_group);\n }\n \n-static void gd_set_keycode_type(GtkDisplayState *s)\n-{\n-#ifdef GDK_WINDOWING_X11\n- GdkDisplay *display = gtk_widget_get_display(s->window);\n- if (GDK_IS_X11_DISPLAY(display)) {\n- Display *x11_display = gdk_x11_display_get_xdisplay(display);\n- XkbDescPtr desc = XkbGetMap(x11_display, XkbGBN_AllComponentsMask,\n- XkbUseCoreKbd);\n- char *keycodes = NULL;\n-\n- if (desc &&\n- (XkbGetNames(x11_display, XkbKeycodesNameMask, desc) == Success)) {\n- keycodes = XGetAtomName(x11_display, desc->names->keycodes);\n- }\n- if (keycodes == NULL) {\n- fprintf(stderr, \"could not lookup keycode name\\n\");\n- } else if (strstart(keycodes, \"evdev\", NULL)) {\n- s->has_evdev = true;\n- } else if (!strstart(keycodes, \"xfree86\", NULL)) {\n- fprintf(stderr, \"unknown keycodes `%s', please report to \"\n- \"qemu-devel@nongnu.org\\n\", keycodes);\n- }\n-\n- if (desc) {\n- XkbFreeKeyboard(desc, XkbGBN_AllComponentsMask, True);\n- }\n- if (keycodes) {\n- XFree(keycodes);\n- }\n- }\n-#endif\n-}\n \n static gboolean gtkinit;\n \n@@ -2329,8 +2370,6 @@ void gtk_display_init(DisplayState *ds, bool full_screen, bool grab_on_hover)\n if (grab_on_hover) {\n gtk_menu_item_activate(GTK_MENU_ITEM(s->grab_on_hover_item));\n }\n-\n- gd_set_keycode_type(s);\n }\n \n void early_gtk_display_init(int opengl)\n@@ -2377,6 +2416,8 @@ void early_gtk_display_init(int opengl)\n break;\n }\n \n+ keycode_map = gd_get_keymap(&keycode_maplen);\n+\n #if defined(CONFIG_VTE)\n type_register(&char_gd_vc_type_info);\n #endif\ndiff --git a/ui/input-keymap-atset1-to-qcode.c b/ui/input-keymap-atset1-to-qcode.c\nnew file mode 100644\nindex 0000000000..7882724e36\n--- /dev/null\n+++ b/ui/input-keymap-atset1-to-qcode.c\n@@ -0,0 +1,245 @@\n+/*\n+ * This file is auto-generated from keymaps.csv on 2017-08-31 11:08\n+ * Database checksum sha256(f8aeff0c3430077a350e3d7ba2b335b381bd929ac4b193413730a402ff3f0097)\n+ * To re-generate, run:\n+ * keymap-gen --lang=glib2 --varname=qemu_input_map_atset1_to_qcode code-map keymaps.csv atset1 qcode\n+*/\n+const guint16 qemu_input_map_atset1_to_qcode[57470] = {\n+ [0x1] = Q_KEY_CODE_ESC, /* atset1:1 -> linux:1 (KEY_ESC) -> qcode:Q_KEY_CODE_ESC (esc) */\n+ [0x2] = Q_KEY_CODE_1, /* atset1:2 -> linux:2 (KEY_1) -> qcode:Q_KEY_CODE_1 (1) */\n+ [0x3] = Q_KEY_CODE_2, /* atset1:3 -> linux:3 (KEY_2) -> qcode:Q_KEY_CODE_2 (2) */\n+ [0x4] = Q_KEY_CODE_3, /* atset1:4 -> linux:4 (KEY_3) -> qcode:Q_KEY_CODE_3 (3) */\n+ [0x5] = Q_KEY_CODE_4, /* atset1:5 -> linux:5 (KEY_4) -> qcode:Q_KEY_CODE_4 (4) */\n+ [0x6] = Q_KEY_CODE_5, /* atset1:6 -> linux:6 (KEY_5) -> qcode:Q_KEY_CODE_5 (5) */\n+ [0x7] = Q_KEY_CODE_6, /* atset1:7 -> linux:7 (KEY_6) -> qcode:Q_KEY_CODE_6 (6) */\n+ [0x8] = Q_KEY_CODE_7, /* atset1:8 -> linux:8 (KEY_7) -> qcode:Q_KEY_CODE_7 (7) */\n+ [0x9] = Q_KEY_CODE_8, /* atset1:9 -> linux:9 (KEY_8) -> qcode:Q_KEY_CODE_8 (8) */\n+ [0xa] = Q_KEY_CODE_9, /* atset1:10 -> linux:10 (KEY_9) -> qcode:Q_KEY_CODE_9 (9) */\n+ [0xb] = Q_KEY_CODE_0, /* atset1:11 -> linux:11 (KEY_0) -> qcode:Q_KEY_CODE_0 (0) */\n+ [0xc] = Q_KEY_CODE_MINUS, /* atset1:12 -> linux:12 (KEY_MINUS) -> qcode:Q_KEY_CODE_MINUS (minus) */\n+ [0xd] = Q_KEY_CODE_EQUAL, /* atset1:13 -> linux:13 (KEY_EQUAL) -> qcode:Q_KEY_CODE_EQUAL (equal) */\n+ [0xe] = Q_KEY_CODE_BACKSPACE, /* atset1:14 -> linux:14 (KEY_BACKSPACE) -> qcode:Q_KEY_CODE_BACKSPACE (backspace) */\n+ [0xf] = Q_KEY_CODE_TAB, /* atset1:15 -> linux:15 (KEY_TAB) -> qcode:Q_KEY_CODE_TAB (tab) */\n+ [0x10] = Q_KEY_CODE_Q, /* atset1:16 -> linux:16 (KEY_Q) -> qcode:Q_KEY_CODE_Q (q) */\n+ [0x11] = Q_KEY_CODE_W, /* atset1:17 -> linux:17 (KEY_W) -> qcode:Q_KEY_CODE_W (w) */\n+ [0x12] = Q_KEY_CODE_E, /* atset1:18 -> linux:18 (KEY_E) -> qcode:Q_KEY_CODE_E (e) */\n+ [0x13] = Q_KEY_CODE_R, /* atset1:19 -> linux:19 (KEY_R) -> qcode:Q_KEY_CODE_R (r) */\n+ [0x14] = Q_KEY_CODE_T, /* atset1:20 -> linux:20 (KEY_T) -> qcode:Q_KEY_CODE_T (t) */\n+ [0x15] = Q_KEY_CODE_Y, /* atset1:21 -> linux:21 (KEY_Y) -> qcode:Q_KEY_CODE_Y (y) */\n+ [0x16] = Q_KEY_CODE_U, /* atset1:22 -> linux:22 (KEY_U) -> qcode:Q_KEY_CODE_U (u) */\n+ [0x17] = Q_KEY_CODE_I, /* atset1:23 -> linux:23 (KEY_I) -> qcode:Q_KEY_CODE_I (i) */\n+ [0x18] = Q_KEY_CODE_O, /* atset1:24 -> linux:24 (KEY_O) -> qcode:Q_KEY_CODE_O (o) */\n+ [0x19] = Q_KEY_CODE_P, /* atset1:25 -> linux:25 (KEY_P) -> qcode:Q_KEY_CODE_P (p) */\n+ [0x1a] = Q_KEY_CODE_BRACKET_LEFT, /* atset1:26 -> linux:26 (KEY_LEFTBRACE) -> qcode:Q_KEY_CODE_BRACKET_LEFT (bracket_left) */\n+ [0x1b] = Q_KEY_CODE_BRACKET_RIGHT, /* atset1:27 -> linux:27 (KEY_RIGHTBRACE) -> qcode:Q_KEY_CODE_BRACKET_RIGHT (bracket_right) */\n+ [0x1c] = Q_KEY_CODE_RET, /* atset1:28 -> linux:28 (KEY_ENTER) -> qcode:Q_KEY_CODE_RET (ret) */\n+ [0x1d] = Q_KEY_CODE_CTRL, /* atset1:29 -> linux:29 (KEY_LEFTCTRL) -> qcode:Q_KEY_CODE_CTRL (ctrl) */\n+ [0x1e] = Q_KEY_CODE_A, /* atset1:30 -> linux:30 (KEY_A) -> qcode:Q_KEY_CODE_A (a) */\n+ [0x1f] = Q_KEY_CODE_S, /* atset1:31 -> linux:31 (KEY_S) -> qcode:Q_KEY_CODE_S (s) */\n+ [0x20] = Q_KEY_CODE_D, /* atset1:32 -> linux:32 (KEY_D) -> qcode:Q_KEY_CODE_D (d) */\n+ [0x21] = Q_KEY_CODE_F, /* atset1:33 -> linux:33 (KEY_F) -> qcode:Q_KEY_CODE_F (f) */\n+ [0x22] = Q_KEY_CODE_G, /* atset1:34 -> linux:34 (KEY_G) -> qcode:Q_KEY_CODE_G (g) */\n+ [0x23] = Q_KEY_CODE_H, /* atset1:35 -> linux:35 (KEY_H) -> qcode:Q_KEY_CODE_H (h) */\n+ [0x24] = Q_KEY_CODE_J, /* atset1:36 -> linux:36 (KEY_J) -> qcode:Q_KEY_CODE_J (j) */\n+ [0x25] = Q_KEY_CODE_K, /* atset1:37 -> linux:37 (KEY_K) -> qcode:Q_KEY_CODE_K (k) */\n+ [0x26] = Q_KEY_CODE_L, /* atset1:38 -> linux:38 (KEY_L) -> qcode:Q_KEY_CODE_L (l) */\n+ [0x27] = Q_KEY_CODE_SEMICOLON, /* atset1:39 -> linux:39 (KEY_SEMICOLON) -> qcode:Q_KEY_CODE_SEMICOLON (semicolon) */\n+ [0x28] = Q_KEY_CODE_APOSTROPHE, /* atset1:40 -> linux:40 (KEY_APOSTROPHE) -> qcode:Q_KEY_CODE_APOSTROPHE (apostrophe) */\n+ [0x29] = Q_KEY_CODE_GRAVE_ACCENT, /* atset1:41 -> linux:41 (KEY_GRAVE) -> qcode:Q_KEY_CODE_GRAVE_ACCENT (grave_accent) */\n+ [0x2a] = Q_KEY_CODE_SHIFT, /* atset1:42 -> linux:42 (KEY_LEFTSHIFT) -> qcode:Q_KEY_CODE_SHIFT (shift) */\n+ [0x2b] = Q_KEY_CODE_BACKSLASH, /* atset1:43 -> linux:43 (KEY_BACKSLASH) -> qcode:Q_KEY_CODE_BACKSLASH (backslash) */\n+ [0x2c] = Q_KEY_CODE_Z, /* atset1:44 -> linux:44 (KEY_Z) -> qcode:Q_KEY_CODE_Z (z) */\n+ [0x2d] = Q_KEY_CODE_X, /* atset1:45 -> linux:45 (KEY_X) -> qcode:Q_KEY_CODE_X (x) */\n+ [0x2e] = Q_KEY_CODE_C, /* atset1:46 -> linux:46 (KEY_C) -> qcode:Q_KEY_CODE_C (c) */\n+ [0x2f] = Q_KEY_CODE_V, /* atset1:47 -> linux:47 (KEY_V) -> qcode:Q_KEY_CODE_V (v) */\n+ [0x30] = Q_KEY_CODE_B, /* atset1:48 -> linux:48 (KEY_B) -> qcode:Q_KEY_CODE_B (b) */\n+ [0x31] = Q_KEY_CODE_N, /* atset1:49 -> linux:49 (KEY_N) -> qcode:Q_KEY_CODE_N (n) */\n+ [0x32] = Q_KEY_CODE_M, /* atset1:50 -> linux:50 (KEY_M) -> qcode:Q_KEY_CODE_M (m) */\n+ [0x33] = Q_KEY_CODE_COMMA, /* atset1:51 -> linux:51 (KEY_COMMA) -> qcode:Q_KEY_CODE_COMMA (comma) */\n+ [0x34] = Q_KEY_CODE_DOT, /* atset1:52 -> linux:52 (KEY_DOT) -> qcode:Q_KEY_CODE_DOT (dot) */\n+ [0x35] = Q_KEY_CODE_SLASH, /* atset1:53 -> linux:53 (KEY_SLASH) -> qcode:Q_KEY_CODE_SLASH (slash) */\n+ [0x36] = Q_KEY_CODE_SHIFT_R, /* atset1:54 -> linux:54 (KEY_RIGHTSHIFT) -> qcode:Q_KEY_CODE_SHIFT_R (shift_r) */\n+ [0x37] = Q_KEY_CODE_KP_MULTIPLY, /* atset1:55 -> linux:55 (KEY_KPASTERISK) -> qcode:Q_KEY_CODE_KP_MULTIPLY (kp_multiply) */\n+ [0x38] = Q_KEY_CODE_ALT, /* atset1:56 -> linux:56 (KEY_LEFTALT) -> qcode:Q_KEY_CODE_ALT (alt) */\n+ [0x39] = Q_KEY_CODE_SPC, /* atset1:57 -> linux:57 (KEY_SPACE) -> qcode:Q_KEY_CODE_SPC (spc) */\n+ [0x3a] = Q_KEY_CODE_CAPS_LOCK, /* atset1:58 -> linux:58 (KEY_CAPSLOCK) -> qcode:Q_KEY_CODE_CAPS_LOCK (caps_lock) */\n+ [0x3b] = Q_KEY_CODE_F1, /* atset1:59 -> linux:59 (KEY_F1) -> qcode:Q_KEY_CODE_F1 (f1) */\n+ [0x3c] = Q_KEY_CODE_F2, /* atset1:60 -> linux:60 (KEY_F2) -> qcode:Q_KEY_CODE_F2 (f2) */\n+ [0x3d] = Q_KEY_CODE_F3, /* atset1:61 -> linux:61 (KEY_F3) -> qcode:Q_KEY_CODE_F3 (f3) */\n+ [0x3e] = Q_KEY_CODE_F4, /* atset1:62 -> linux:62 (KEY_F4) -> qcode:Q_KEY_CODE_F4 (f4) */\n+ [0x3f] = Q_KEY_CODE_F5, /* atset1:63 -> linux:63 (KEY_F5) -> qcode:Q_KEY_CODE_F5 (f5) */\n+ [0x40] = Q_KEY_CODE_F6, /* atset1:64 -> linux:64 (KEY_F6) -> qcode:Q_KEY_CODE_F6 (f6) */\n+ [0x41] = Q_KEY_CODE_F7, /* atset1:65 -> linux:65 (KEY_F7) -> qcode:Q_KEY_CODE_F7 (f7) */\n+ [0x42] = Q_KEY_CODE_F8, /* atset1:66 -> linux:66 (KEY_F8) -> qcode:Q_KEY_CODE_F8 (f8) */\n+ [0x43] = Q_KEY_CODE_F9, /* atset1:67 -> linux:67 (KEY_F9) -> qcode:Q_KEY_CODE_F9 (f9) */\n+ [0x44] = Q_KEY_CODE_F10, /* atset1:68 -> linux:68 (KEY_F10) -> qcode:Q_KEY_CODE_F10 (f10) */\n+ [0x45] = Q_KEY_CODE_NUM_LOCK, /* atset1:69 -> linux:69 (KEY_NUMLOCK) -> qcode:Q_KEY_CODE_NUM_LOCK (num_lock) */\n+ [0x46] = Q_KEY_CODE_SCROLL_LOCK, /* atset1:70 -> linux:70 (KEY_SCROLLLOCK) -> qcode:Q_KEY_CODE_SCROLL_LOCK (scroll_lock) */\n+ [0x47] = Q_KEY_CODE_KP_7, /* atset1:71 -> linux:71 (KEY_KP7) -> qcode:Q_KEY_CODE_KP_7 (kp_7) */\n+ [0x48] = Q_KEY_CODE_KP_8, /* atset1:72 -> linux:72 (KEY_KP8) -> qcode:Q_KEY_CODE_KP_8 (kp_8) */\n+ [0x49] = Q_KEY_CODE_KP_9, /* atset1:73 -> linux:73 (KEY_KP9) -> qcode:Q_KEY_CODE_KP_9 (kp_9) */\n+ [0x4a] = Q_KEY_CODE_KP_SUBTRACT, /* atset1:74 -> linux:74 (KEY_KPMINUS) -> qcode:Q_KEY_CODE_KP_SUBTRACT (kp_subtract) */\n+ [0x4b] = Q_KEY_CODE_KP_4, /* atset1:75 -> linux:75 (KEY_KP4) -> qcode:Q_KEY_CODE_KP_4 (kp_4) */\n+ [0x4c] = Q_KEY_CODE_KP_5, /* atset1:76 -> linux:76 (KEY_KP5) -> qcode:Q_KEY_CODE_KP_5 (kp_5) */\n+ [0x4d] = Q_KEY_CODE_KP_6, /* atset1:77 -> linux:77 (KEY_KP6) -> qcode:Q_KEY_CODE_KP_6 (kp_6) */\n+ [0x4e] = Q_KEY_CODE_KP_ADD, /* atset1:78 -> linux:78 (KEY_KPPLUS) -> qcode:Q_KEY_CODE_KP_ADD (kp_add) */\n+ [0x4f] = Q_KEY_CODE_KP_1, /* atset1:79 -> linux:79 (KEY_KP1) -> qcode:Q_KEY_CODE_KP_1 (kp_1) */\n+ [0x50] = Q_KEY_CODE_KP_2, /* atset1:80 -> linux:80 (KEY_KP2) -> qcode:Q_KEY_CODE_KP_2 (kp_2) */\n+ [0x51] = Q_KEY_CODE_KP_3, /* atset1:81 -> linux:81 (KEY_KP3) -> qcode:Q_KEY_CODE_KP_3 (kp_3) */\n+ [0x52] = Q_KEY_CODE_KP_0, /* atset1:82 -> linux:82 (KEY_KP0) -> qcode:Q_KEY_CODE_KP_0 (kp_0) */\n+ [0x53] = Q_KEY_CODE_KP_DECIMAL, /* atset1:83 -> linux:83 (KEY_KPDOT) -> qcode:Q_KEY_CODE_KP_DECIMAL (kp_decimal) */\n+ [0x54] = Q_KEY_CODE_SYSRQ, /* atset1:84 -> linux:99 (KEY_SYSRQ) -> qcode:Q_KEY_CODE_SYSRQ (sysrq) */\n+ [0x55] = Q_KEY_CODE_UNMAPPED, /* atset1:85 -> linux:186 (KEY_F16) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x56] = Q_KEY_CODE_LESS, /* atset1:86 -> linux:86 (KEY_102ND) -> qcode:Q_KEY_CODE_LESS (less) */\n+ [0x57] = Q_KEY_CODE_F11, /* atset1:87 -> linux:87 (KEY_F11) -> qcode:Q_KEY_CODE_F11 (f11) */\n+ [0x58] = Q_KEY_CODE_F12, /* atset1:88 -> linux:88 (KEY_F12) -> qcode:Q_KEY_CODE_F12 (f12) */\n+ [0x59] = Q_KEY_CODE_KP_EQUALS, /* atset1:89 -> linux:117 (KEY_KPEQUAL) -> qcode:Q_KEY_CODE_KP_EQUALS (kp_equals) */\n+ [0x5a] = Q_KEY_CODE_UNMAPPED, /* atset1:90 -> linux:190 (KEY_F20) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x5b] = Q_KEY_CODE_LF, /* atset1:91 -> linux:101 (KEY_LINEFEED) -> qcode:Q_KEY_CODE_LF (lf) */\n+ [0x5c] = Q_KEY_CODE_UNMAPPED, /* atset1:92 -> linux:95 (KEY_KPJPCOMMA) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x5d] = Q_KEY_CODE_UNMAPPED, /* atset1:93 -> linux:183 (KEY_F13) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x5e] = Q_KEY_CODE_UNMAPPED, /* atset1:94 -> linux:184 (KEY_F14) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x5f] = Q_KEY_CODE_UNMAPPED, /* atset1:95 -> linux:185 (KEY_F15) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x63] = Q_KEY_CODE_UNMAPPED, /* atset1:99 -> linux:169 (KEY_PHONE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x64] = Q_KEY_CODE_OPEN, /* atset1:100 -> linux:134 (KEY_OPEN) -> qcode:Q_KEY_CODE_OPEN (open) */\n+ [0x65] = Q_KEY_CODE_PASTE, /* atset1:101 -> linux:135 (KEY_PASTE) -> qcode:Q_KEY_CODE_PASTE (paste) */\n+ [0x66] = Q_KEY_CODE_UNMAPPED, /* atset1:102 -> linux:141 (KEY_SETUP) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x67] = Q_KEY_CODE_UNMAPPED, /* atset1:103 -> linux:144 (KEY_FILE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x68] = Q_KEY_CODE_UNMAPPED, /* atset1:104 -> linux:145 (KEY_SENDFILE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x69] = Q_KEY_CODE_UNMAPPED, /* atset1:105 -> linux:146 (KEY_DELETEFILE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x6a] = Q_KEY_CODE_UNMAPPED, /* atset1:106 -> linux:151 (KEY_MSDOS) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x6b] = Q_KEY_CODE_UNMAPPED, /* atset1:107 -> linux:153 (KEY_DIRECTION) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x6c] = Q_KEY_CODE_UNMAPPED, /* atset1:108 -> linux:161 (KEY_EJECTCD) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x6d] = Q_KEY_CODE_UNMAPPED, /* atset1:109 -> linux:193 (KEY_F23) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x6f] = Q_KEY_CODE_UNMAPPED, /* atset1:111 -> linux:194 (KEY_F24) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x70] = Q_KEY_CODE_UNMAPPED, /* atset1:112 -> linux:170 (KEY_ISO) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x71] = Q_KEY_CODE_UNMAPPED, /* atset1:113 -> linux:174 (KEY_EXIT) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x72] = Q_KEY_CODE_UNMAPPED, /* atset1:114 -> linux:175 (KEY_MOVE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x73] = Q_KEY_CODE_RO, /* atset1:115 -> linux:89 (KEY_RO) -> qcode:Q_KEY_CODE_RO (ro) */\n+ [0x74] = Q_KEY_CODE_UNMAPPED, /* atset1:116 -> linux:191 (KEY_F21) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x75] = Q_KEY_CODE_UNMAPPED, /* atset1:117 -> linux:177 (KEY_SCROLLUP) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x76] = Q_KEY_CODE_UNMAPPED, /* atset1:118 -> linux:85 (KEY_ZENKAKUHANKAKU) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x77] = Q_KEY_CODE_HIRAGANA, /* atset1:119 -> linux:91 (KEY_HIRAGANA) -> qcode:Q_KEY_CODE_HIRAGANA (hiragana) */\n+ [0x78] = Q_KEY_CODE_UNMAPPED, /* atset1:120 -> linux:90 (KEY_KATAKANA) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x79] = Q_KEY_CODE_HENKAN, /* atset1:121 -> linux:92 (KEY_HENKAN) -> qcode:Q_KEY_CODE_HENKAN (henkan) */\n+ [0x7b] = Q_KEY_CODE_UNMAPPED, /* atset1:123 -> linux:94 (KEY_MUHENKAN) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x7d] = Q_KEY_CODE_YEN, /* atset1:125 -> linux:124 (KEY_YEN) -> qcode:Q_KEY_CODE_YEN (yen) */\n+ [0x7e] = Q_KEY_CODE_KP_COMMA, /* atset1:126 -> linux:121 (KEY_KPCOMMA) -> qcode:Q_KEY_CODE_KP_COMMA (kp_comma) */\n+ [0xe001] = Q_KEY_CODE_UNMAPPED, /* atset1:57345 -> linux:171 (KEY_CONFIG) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe002] = Q_KEY_CODE_UNMAPPED, /* atset1:57346 -> linux:150 (KEY_WWW) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe003] = Q_KEY_CODE_UNMAPPED, /* atset1:57347 -> linux:187 (KEY_F17) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe004] = Q_KEY_CODE_UNMAPPED, /* atset1:57348 -> linux:189 (KEY_F19) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe005] = Q_KEY_CODE_AGAIN, /* atset1:57349 -> linux:129 (KEY_AGAIN) -> qcode:Q_KEY_CODE_AGAIN (again) */\n+ [0xe006] = Q_KEY_CODE_PROPS, /* atset1:57350 -> linux:130 (KEY_PROPS) -> qcode:Q_KEY_CODE_PROPS (props) */\n+ [0xe007] = Q_KEY_CODE_UNDO, /* atset1:57351 -> linux:131 (KEY_UNDO) -> qcode:Q_KEY_CODE_UNDO (undo) */\n+ [0xe008] = Q_KEY_CODE_UNMAPPED, /* atset1:57352 -> linux:176 (KEY_EDIT) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe009] = Q_KEY_CODE_UNMAPPED, /* atset1:57353 -> linux:181 (KEY_NEW) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe00a] = Q_KEY_CODE_UNMAPPED, /* atset1:57354 -> linux:182 (KEY_REDO) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe00b] = Q_KEY_CODE_UNMAPPED, /* atset1:57355 -> linux:120 (KEY_SCALE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe00c] = Q_KEY_CODE_FRONT, /* atset1:57356 -> linux:132 (KEY_FRONT) -> qcode:Q_KEY_CODE_FRONT (front) */\n+ [0xe00d] = Q_KEY_CODE_UNMAPPED, /* atset1:57357 -> linux:123 (KEY_HANJA) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe00e] = Q_KEY_CODE_UNMAPPED, /* atset1:57358 -> linux:233 (KEY_FORWARDMAIL) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe00f] = Q_KEY_CODE_UNMAPPED, /* atset1:57359 -> linux:178 (KEY_SCROLLDOWN) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe010] = Q_KEY_CODE_AUDIOPREV, /* atset1:57360 -> linux:165 (KEY_PREVIOUSSONG) -> qcode:Q_KEY_CODE_AUDIOPREV (audioprev) */\n+ [0xe012] = Q_KEY_CODE_UNMAPPED, /* atset1:57362 -> linux:152 (KEY_SCREENLOCK) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe013] = Q_KEY_CODE_UNMAPPED, /* atset1:57363 -> linux:147 (KEY_XFER) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe014] = Q_KEY_CODE_UNMAPPED, /* atset1:57364 -> linux:222 (KEY_ALTERASE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe015] = Q_KEY_CODE_UNMAPPED, /* atset1:57365 -> linux:195 (unnamed) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe016] = Q_KEY_CODE_UNMAPPED, /* atset1:57366 -> linux:196 (unnamed) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe017] = Q_KEY_CODE_UNMAPPED, /* atset1:57367 -> linux:149 (KEY_PROG2) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe018] = Q_KEY_CODE_UNMAPPED, /* atset1:57368 -> linux:168 (KEY_REWIND) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe019] = Q_KEY_CODE_AUDIONEXT, /* atset1:57369 -> linux:163 (KEY_NEXTSONG) -> qcode:Q_KEY_CODE_AUDIONEXT (audionext) */\n+ [0xe01a] = Q_KEY_CODE_UNMAPPED, /* atset1:57370 -> linux:197 (unnamed) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe01b] = Q_KEY_CODE_UNMAPPED, /* atset1:57371 -> linux:198 (unnamed) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe01c] = Q_KEY_CODE_KP_ENTER, /* atset1:57372 -> linux:96 (KEY_KPENTER) -> qcode:Q_KEY_CODE_KP_ENTER (kp_enter) */\n+ [0xe01d] = Q_KEY_CODE_CTRL_R, /* atset1:57373 -> linux:97 (KEY_RIGHTCTRL) -> qcode:Q_KEY_CODE_CTRL_R (ctrl_r) */\n+ [0xe01e] = Q_KEY_CODE_MENU, /* atset1:57374 -> linux:139 (KEY_MENU) -> qcode:Q_KEY_CODE_MENU (menu) */\n+ [0xe01f] = Q_KEY_CODE_UNMAPPED, /* atset1:57375 -> linux:148 (KEY_PROG1) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe020] = Q_KEY_CODE_AUDIOMUTE, /* atset1:57376 -> linux:113 (KEY_MUTE) -> qcode:Q_KEY_CODE_AUDIOMUTE (audiomute) */\n+ [0xe021] = Q_KEY_CODE_CALCULATOR, /* atset1:57377 -> linux:140 (KEY_CALC) -> qcode:Q_KEY_CODE_CALCULATOR (calculator) */\n+ [0xe022] = Q_KEY_CODE_AUDIOPLAY, /* atset1:57378 -> linux:164 (KEY_PLAYPAUSE) -> qcode:Q_KEY_CODE_AUDIOPLAY (audioplay) */\n+ [0xe023] = Q_KEY_CODE_UNMAPPED, /* atset1:57379 -> linux:160 (KEY_CLOSECD) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe024] = Q_KEY_CODE_AUDIOSTOP, /* atset1:57380 -> linux:166 (KEY_STOPCD) -> qcode:Q_KEY_CODE_AUDIOSTOP (audiostop) */\n+ [0xe025] = Q_KEY_CODE_UNMAPPED, /* atset1:57381 -> linux:205 (KEY_SUSPEND) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe026] = Q_KEY_CODE_UNMAPPED, /* atset1:57382 -> linux:154 (KEY_CYCLEWINDOWS) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe027] = Q_KEY_CODE_UNMAPPED, /* atset1:57383 -> linux:199 (unnamed) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe028] = Q_KEY_CODE_UNMAPPED, /* atset1:57384 -> linux:200 (KEY_PLAYCD) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe029] = Q_KEY_CODE_UNMAPPED, /* atset1:57385 -> linux:201 (KEY_PAUSECD) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe02b] = Q_KEY_CODE_UNMAPPED, /* atset1:57387 -> linux:202 (KEY_PROG3) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe02c] = Q_KEY_CODE_UNMAPPED, /* atset1:57388 -> linux:203 (KEY_PROG4) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe02d] = Q_KEY_CODE_UNMAPPED, /* atset1:57389 -> linux:204 (KEY_DASHBOARD) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe02e] = Q_KEY_CODE_VOLUMEDOWN, /* atset1:57390 -> linux:114 (KEY_VOLUMEDOWN) -> qcode:Q_KEY_CODE_VOLUMEDOWN (volumedown) */\n+ [0xe02f] = Q_KEY_CODE_UNMAPPED, /* atset1:57391 -> linux:206 (KEY_CLOSE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe030] = Q_KEY_CODE_VOLUMEUP, /* atset1:57392 -> linux:115 (KEY_VOLUMEUP) -> qcode:Q_KEY_CODE_VOLUMEUP (volumeup) */\n+ [0xe031] = Q_KEY_CODE_UNMAPPED, /* atset1:57393 -> linux:167 (KEY_RECORD) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe032] = Q_KEY_CODE_AC_HOME, /* atset1:57394 -> linux:172 (KEY_HOMEPAGE) -> qcode:Q_KEY_CODE_AC_HOME (ac_home) */\n+ [0xe033] = Q_KEY_CODE_UNMAPPED, /* atset1:57395 -> linux:207 (KEY_PLAY) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe034] = Q_KEY_CODE_UNMAPPED, /* atset1:57396 -> linux:208 (KEY_FASTFORWARD) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe035] = Q_KEY_CODE_KP_DIVIDE, /* atset1:57397 -> linux:98 (KEY_KPSLASH) -> qcode:Q_KEY_CODE_KP_DIVIDE (kp_divide) */\n+ [0xe036] = Q_KEY_CODE_UNMAPPED, /* atset1:57398 -> linux:209 (KEY_BASSBOOST) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe038] = Q_KEY_CODE_ALT_R, /* atset1:57400 -> linux:100 (KEY_RIGHTALT) -> qcode:Q_KEY_CODE_ALT_R (alt_r) */\n+ [0xe039] = Q_KEY_CODE_UNMAPPED, /* atset1:57401 -> linux:210 (KEY_PRINT) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe03a] = Q_KEY_CODE_UNMAPPED, /* atset1:57402 -> linux:211 (KEY_HP) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe03b] = Q_KEY_CODE_UNMAPPED, /* atset1:57403 -> linux:212 (KEY_CAMERA) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe03c] = Q_KEY_CODE_CUT, /* atset1:57404 -> linux:137 (KEY_CUT) -> qcode:Q_KEY_CODE_CUT (cut) */\n+ [0xe03d] = Q_KEY_CODE_UNMAPPED, /* atset1:57405 -> linux:213 (KEY_SOUND) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe03e] = Q_KEY_CODE_UNMAPPED, /* atset1:57406 -> linux:214 (KEY_QUESTION) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe03f] = Q_KEY_CODE_UNMAPPED, /* atset1:57407 -> linux:215 (KEY_EMAIL) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe040] = Q_KEY_CODE_UNMAPPED, /* atset1:57408 -> linux:216 (KEY_CHAT) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe041] = Q_KEY_CODE_FIND, /* atset1:57409 -> linux:136 (KEY_FIND) -> qcode:Q_KEY_CODE_FIND (find) */\n+ [0xe042] = Q_KEY_CODE_UNMAPPED, /* atset1:57410 -> linux:218 (KEY_CONNECT) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe043] = Q_KEY_CODE_UNMAPPED, /* atset1:57411 -> linux:219 (KEY_FINANCE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe044] = Q_KEY_CODE_UNMAPPED, /* atset1:57412 -> linux:220 (KEY_SPORT) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe045] = Q_KEY_CODE_UNMAPPED, /* atset1:57413 -> linux:221 (KEY_SHOP) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe046] = Q_KEY_CODE_PAUSE, /* atset1:57414 -> linux:119 (KEY_PAUSE) -> qcode:Q_KEY_CODE_PAUSE (pause) */\n+ [0xe047] = Q_KEY_CODE_HOME, /* atset1:57415 -> linux:102 (KEY_HOME) -> qcode:Q_KEY_CODE_HOME (home) */\n+ [0xe048] = Q_KEY_CODE_UP, /* atset1:57416 -> linux:103 (KEY_UP) -> qcode:Q_KEY_CODE_UP (up) */\n+ [0xe049] = Q_KEY_CODE_PGUP, /* atset1:57417 -> linux:104 (KEY_PAGEUP) -> qcode:Q_KEY_CODE_PGUP (pgup) */\n+ [0xe04a] = Q_KEY_CODE_UNMAPPED, /* atset1:57418 -> linux:223 (KEY_CANCEL) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe04b] = Q_KEY_CODE_LEFT, /* atset1:57419 -> linux:105 (KEY_LEFT) -> qcode:Q_KEY_CODE_LEFT (left) */\n+ [0xe04c] = Q_KEY_CODE_UNMAPPED, /* atset1:57420 -> linux:224 (KEY_BRIGHTNESSDOWN) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe04d] = Q_KEY_CODE_RIGHT, /* atset1:57421 -> linux:106 (KEY_RIGHT) -> qcode:Q_KEY_CODE_RIGHT (right) */\n+ [0xe04e] = Q_KEY_CODE_UNMAPPED, /* atset1:57422 -> linux:118 (KEY_KPPLUSMINUS) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe04f] = Q_KEY_CODE_END, /* atset1:57423 -> linux:107 (KEY_END) -> qcode:Q_KEY_CODE_END (end) */\n+ [0xe050] = Q_KEY_CODE_DOWN, /* atset1:57424 -> linux:108 (KEY_DOWN) -> qcode:Q_KEY_CODE_DOWN (down) */\n+ [0xe051] = Q_KEY_CODE_PGDN, /* atset1:57425 -> linux:109 (KEY_PAGEDOWN) -> qcode:Q_KEY_CODE_PGDN (pgdn) */\n+ [0xe052] = Q_KEY_CODE_INSERT, /* atset1:57426 -> linux:110 (KEY_INSERT) -> qcode:Q_KEY_CODE_INSERT (insert) */\n+ [0xe053] = Q_KEY_CODE_DELETE, /* atset1:57427 -> linux:111 (KEY_DELETE) -> qcode:Q_KEY_CODE_DELETE (delete) */\n+ [0xe054] = Q_KEY_CODE_UNMAPPED, /* atset1:57428 -> linux:225 (KEY_BRIGHTNESSUP) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe055] = Q_KEY_CODE_UNMAPPED, /* atset1:57429 -> linux:234 (KEY_SAVE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe056] = Q_KEY_CODE_UNMAPPED, /* atset1:57430 -> linux:227 (KEY_SWITCHVIDEOMODE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe057] = Q_KEY_CODE_UNMAPPED, /* atset1:57431 -> linux:228 (KEY_KBDILLUMTOGGLE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe058] = Q_KEY_CODE_UNMAPPED, /* atset1:57432 -> linux:229 (KEY_KBDILLUMDOWN) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe059] = Q_KEY_CODE_UNMAPPED, /* atset1:57433 -> linux:230 (KEY_KBDILLUMUP) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe05a] = Q_KEY_CODE_UNMAPPED, /* atset1:57434 -> linux:231 (KEY_SEND) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe05b] = Q_KEY_CODE_META_L, /* atset1:57435 -> linux:125 (KEY_LEFTMETA) -> qcode:Q_KEY_CODE_META_L (meta_l) */\n+ [0xe05c] = Q_KEY_CODE_META_R, /* atset1:57436 -> linux:126 (KEY_RIGHTMETA) -> qcode:Q_KEY_CODE_META_R (meta_r) */\n+ [0xe05d] = Q_KEY_CODE_COMPOSE, /* atset1:57437 -> linux:127 (KEY_COMPOSE) -> qcode:Q_KEY_CODE_COMPOSE (compose) */\n+ [0xe05e] = Q_KEY_CODE_POWER, /* atset1:57438 -> linux:116 (KEY_POWER) -> qcode:Q_KEY_CODE_POWER (power) */\n+ [0xe05f] = Q_KEY_CODE_SLEEP, /* atset1:57439 -> linux:142 (KEY_SLEEP) -> qcode:Q_KEY_CODE_SLEEP (sleep) */\n+ [0xe063] = Q_KEY_CODE_WAKE, /* atset1:57443 -> linux:143 (KEY_WAKEUP) -> qcode:Q_KEY_CODE_WAKE (wake) */\n+ [0xe064] = Q_KEY_CODE_UNMAPPED, /* atset1:57444 -> linux:232 (KEY_REPLY) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe065] = Q_KEY_CODE_UNMAPPED, /* atset1:57445 -> linux:217 (KEY_SEARCH) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe066] = Q_KEY_CODE_AC_BOOKMARKS, /* atset1:57446 -> linux:156 (KEY_BOOKMARKS) -> qcode:Q_KEY_CODE_AC_BOOKMARKS (ac_bookmarks) */\n+ [0xe067] = Q_KEY_CODE_AC_REFRESH, /* atset1:57447 -> linux:173 (KEY_REFRESH) -> qcode:Q_KEY_CODE_AC_REFRESH (ac_refresh) */\n+ [0xe068] = Q_KEY_CODE_STOP, /* atset1:57448 -> linux:128 (KEY_STOP) -> qcode:Q_KEY_CODE_STOP (stop) */\n+ [0xe069] = Q_KEY_CODE_AC_FORWARD, /* atset1:57449 -> linux:159 (KEY_FORWARD) -> qcode:Q_KEY_CODE_AC_FORWARD (ac_forward) */\n+ [0xe06a] = Q_KEY_CODE_AC_BACK, /* atset1:57450 -> linux:158 (KEY_BACK) -> qcode:Q_KEY_CODE_AC_BACK (ac_back) */\n+ [0xe06b] = Q_KEY_CODE_COMPUTER, /* atset1:57451 -> linux:157 (KEY_COMPUTER) -> qcode:Q_KEY_CODE_COMPUTER (computer) */\n+ [0xe06c] = Q_KEY_CODE_MAIL, /* atset1:57452 -> linux:155 (KEY_MAIL) -> qcode:Q_KEY_CODE_MAIL (mail) */\n+ [0xe06d] = Q_KEY_CODE_MEDIASELECT, /* atset1:57453 -> linux:226 (KEY_MEDIA) -> qcode:Q_KEY_CODE_MEDIASELECT (mediaselect) */\n+ [0xe06f] = Q_KEY_CODE_UNMAPPED, /* atset1:57455 -> linux:112 (KEY_MACRO) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe070] = Q_KEY_CODE_UNMAPPED, /* atset1:57456 -> linux:235 (KEY_DOCUMENTS) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe071] = Q_KEY_CODE_UNMAPPED, /* atset1:57457 -> linux:236 (KEY_BATTERY) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe072] = Q_KEY_CODE_UNMAPPED, /* atset1:57458 -> linux:237 (KEY_BLUETOOTH) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe073] = Q_KEY_CODE_UNMAPPED, /* atset1:57459 -> linux:238 (KEY_WLAN) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe074] = Q_KEY_CODE_UNMAPPED, /* atset1:57460 -> linux:239 (KEY_UWB) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe075] = Q_KEY_CODE_HELP, /* atset1:57461 -> linux:138 (KEY_HELP) -> qcode:Q_KEY_CODE_HELP (help) */\n+ [0xe076] = Q_KEY_CODE_UNMAPPED, /* atset1:57462 -> linux:179 (KEY_KPLEFTPAREN) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe077] = Q_KEY_CODE_UNMAPPED, /* atset1:57463 -> linux:188 (KEY_F18) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe078] = Q_KEY_CODE_COPY, /* atset1:57464 -> linux:133 (KEY_COPY) -> qcode:Q_KEY_CODE_COPY (copy) */\n+ [0xe079] = Q_KEY_CODE_UNMAPPED, /* atset1:57465 -> linux:192 (KEY_F22) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe07b] = Q_KEY_CODE_UNMAPPED, /* atset1:57467 -> linux:180 (KEY_KPRIGHTPAREN) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe07d] = Q_KEY_CODE_UNMAPPED, /* atset1:57469 -> linux:162 (KEY_EJECTCLOSECD) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+};\n+const guint qemu_input_map_atset1_to_qcode_len = sizeof(qemu_input_map_atset1_to_qcode)/sizeof(qemu_input_map_atset1_to_qcode[0]);\ndiff --git a/ui/input-keymap-win32-to-qcode.c b/ui/input-keymap-win32-to-qcode.c\nnew file mode 100644\nindex 0000000000..c05dfb9106\n--- /dev/null\n+++ b/ui/input-keymap-win32-to-qcode.c\n@@ -0,0 +1,157 @@\n+/*\n+ * This file is auto-generated from keymaps.csv on 2017-08-31 11:08\n+ * Database checksum sha256(f8aeff0c3430077a350e3d7ba2b335b381bd929ac4b193413730a402ff3f0097)\n+ * To re-generate, run:\n+ * keymap-gen --lang=glib2 --varname=qemu_input_map_win32_to_qcode code-map keymaps.csv win32 qcode\n+*/\n+const guint16 qemu_input_map_win32_to_qcode[252] = {\n+ [0x1] = Q_KEY_CODE_UNMAPPED, /* win32:1 (VK_LBUTTON) -> linux:256 (BTN_0) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x2] = Q_KEY_CODE_UNMAPPED, /* win32:2 (VK_RBUTTON) -> linux:257 (BTN_1) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x4] = Q_KEY_CODE_UNMAPPED, /* win32:4 (VK_MBUTTON) -> linux:258 (BTN_2) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x5] = Q_KEY_CODE_UNMAPPED, /* win32:5 (VK_XBUTTON1) -> linux:259 (BTN_3) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x6] = Q_KEY_CODE_UNMAPPED, /* win32:6 (VK_XBUTTON2) -> linux:260 (BTN_4) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x8] = Q_KEY_CODE_BACKSPACE, /* win32:8 (VK_BACK) -> linux:14 (KEY_BACKSPACE) -> qcode:Q_KEY_CODE_BACKSPACE (backspace) */\n+ [0x9] = Q_KEY_CODE_TAB, /* win32:9 (VK_TAB) -> linux:15 (KEY_TAB) -> qcode:Q_KEY_CODE_TAB (tab) */\n+ [0xd] = Q_KEY_CODE_RET, /* win32:13 (VK_RETURN) -> linux:28 (KEY_ENTER) -> qcode:Q_KEY_CODE_RET (ret) */\n+ [0x10] = Q_KEY_CODE_SHIFT, /* win32:16 (VK_LSHIFT) -> linux:42 (KEY_LEFTSHIFT) -> qcode:Q_KEY_CODE_SHIFT (shift) */\n+ [0x11] = Q_KEY_CODE_CTRL, /* win32:17 (VK_CONTROL) -> linux:29 (KEY_LEFTCTRL) -> qcode:Q_KEY_CODE_CTRL (ctrl) */\n+ [0x12] = Q_KEY_CODE_ALT, /* win32:18 (VK_MENU) -> linux:56 (KEY_LEFTALT) -> qcode:Q_KEY_CODE_ALT (alt) */\n+ [0x13] = Q_KEY_CODE_PAUSE, /* win32:19 (VK_PAUSE) -> linux:119 (KEY_PAUSE) -> qcode:Q_KEY_CODE_PAUSE (pause) */\n+ [0x14] = Q_KEY_CODE_CAPS_LOCK, /* win32:20 (VK_CAPITAL) -> linux:58 (KEY_CAPSLOCK) -> qcode:Q_KEY_CODE_CAPS_LOCK (caps_lock) */\n+ [0x15] = Q_KEY_CODE_UNMAPPED, /* win32:21 (VK_HANGEUL) -> linux:122 (KEY_HANGEUL) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x19] = Q_KEY_CODE_UNMAPPED, /* win32:25 (VK_HANJA) -> linux:123 (KEY_HANJA) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1b] = Q_KEY_CODE_ESC, /* win32:27 (VK_ESCAPE) -> linux:1 (KEY_ESC) -> qcode:Q_KEY_CODE_ESC (esc) */\n+ [0x20] = Q_KEY_CODE_SPC, /* win32:32 (VK_SPACE) -> linux:57 (KEY_SPACE) -> qcode:Q_KEY_CODE_SPC (spc) */\n+ [0x21] = Q_KEY_CODE_PGUP, /* win32:33 (VK_PRIOR) -> linux:104 (KEY_PAGEUP) -> qcode:Q_KEY_CODE_PGUP (pgup) */\n+ [0x22] = Q_KEY_CODE_PGDN, /* win32:34 (VK_NEXT) -> linux:109 (KEY_PAGEDOWN) -> qcode:Q_KEY_CODE_PGDN (pgdn) */\n+ [0x23] = Q_KEY_CODE_END, /* win32:35 (VK_END) -> linux:107 (KEY_END) -> qcode:Q_KEY_CODE_END (end) */\n+ [0x24] = Q_KEY_CODE_HOME, /* win32:36 (VK_HOME) -> linux:102 (KEY_HOME) -> qcode:Q_KEY_CODE_HOME (home) */\n+ [0x25] = Q_KEY_CODE_LEFT, /* win32:37 (VK_LEFT) -> linux:105 (KEY_LEFT) -> qcode:Q_KEY_CODE_LEFT (left) */\n+ [0x26] = Q_KEY_CODE_UP, /* win32:38 (VK_UP) -> linux:103 (KEY_UP) -> qcode:Q_KEY_CODE_UP (up) */\n+ [0x27] = Q_KEY_CODE_RIGHT, /* win32:39 (VK_RIGHT) -> linux:106 (KEY_RIGHT) -> qcode:Q_KEY_CODE_RIGHT (right) */\n+ [0x28] = Q_KEY_CODE_DOWN, /* win32:40 (VK_DOWN) -> linux:108 (KEY_DOWN) -> qcode:Q_KEY_CODE_DOWN (down) */\n+ [0x29] = Q_KEY_CODE_UNMAPPED, /* win32:41 (VK_SELECT) -> linux:353 (KEY_SELECT) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x2a] = Q_KEY_CODE_UNMAPPED, /* win32:42 (VK_PRINT) -> linux:210 (KEY_PRINT) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x2c] = Q_KEY_CODE_SYSRQ, /* win32:44 (VK_SNAPSHOT) -> linux:99 (KEY_SYSRQ) -> qcode:Q_KEY_CODE_SYSRQ (sysrq) */\n+ [0x2d] = Q_KEY_CODE_INSERT, /* win32:45 (VK_INSERT) -> linux:110 (KEY_INSERT) -> qcode:Q_KEY_CODE_INSERT (insert) */\n+ [0x2e] = Q_KEY_CODE_DELETE, /* win32:46 (VK_DELETE) -> linux:111 (KEY_DELETE) -> qcode:Q_KEY_CODE_DELETE (delete) */\n+ [0x2f] = Q_KEY_CODE_HELP, /* win32:47 (VK_HELP) -> linux:138 (KEY_HELP) -> qcode:Q_KEY_CODE_HELP (help) */\n+ [0x30] = Q_KEY_CODE_0, /* win32:48 (VK_0) -> linux:11 (KEY_0) -> qcode:Q_KEY_CODE_0 (0) */\n+ [0x31] = Q_KEY_CODE_1, /* win32:49 (VK_1) -> linux:2 (KEY_1) -> qcode:Q_KEY_CODE_1 (1) */\n+ [0x32] = Q_KEY_CODE_2, /* win32:50 (VK_2) -> linux:3 (KEY_2) -> qcode:Q_KEY_CODE_2 (2) */\n+ [0x33] = Q_KEY_CODE_3, /* win32:51 (VK_3) -> linux:4 (KEY_3) -> qcode:Q_KEY_CODE_3 (3) */\n+ [0x34] = Q_KEY_CODE_4, /* win32:52 (VK_4) -> linux:5 (KEY_4) -> qcode:Q_KEY_CODE_4 (4) */\n+ [0x35] = Q_KEY_CODE_5, /* win32:53 (VK_5) -> linux:6 (KEY_5) -> qcode:Q_KEY_CODE_5 (5) */\n+ [0x36] = Q_KEY_CODE_6, /* win32:54 (VK_6) -> linux:7 (KEY_6) -> qcode:Q_KEY_CODE_6 (6) */\n+ [0x37] = Q_KEY_CODE_7, /* win32:55 (VK_7) -> linux:8 (KEY_7) -> qcode:Q_KEY_CODE_7 (7) */\n+ [0x38] = Q_KEY_CODE_8, /* win32:56 (VK_8) -> linux:9 (KEY_8) -> qcode:Q_KEY_CODE_8 (8) */\n+ [0x39] = Q_KEY_CODE_9, /* win32:57 (VK_9) -> linux:10 (KEY_9) -> qcode:Q_KEY_CODE_9 (9) */\n+ [0x41] = Q_KEY_CODE_A, /* win32:65 (VK_A) -> linux:30 (KEY_A) -> qcode:Q_KEY_CODE_A (a) */\n+ [0x42] = Q_KEY_CODE_B, /* win32:66 (VK_B) -> linux:48 (KEY_B) -> qcode:Q_KEY_CODE_B (b) */\n+ [0x43] = Q_KEY_CODE_C, /* win32:67 (VK_C) -> linux:46 (KEY_C) -> qcode:Q_KEY_CODE_C (c) */\n+ [0x44] = Q_KEY_CODE_D, /* win32:68 (VK_D) -> linux:32 (KEY_D) -> qcode:Q_KEY_CODE_D (d) */\n+ [0x45] = Q_KEY_CODE_E, /* win32:69 (VK_E) -> linux:18 (KEY_E) -> qcode:Q_KEY_CODE_E (e) */\n+ [0x46] = Q_KEY_CODE_F, /* win32:70 (VK_F) -> linux:33 (KEY_F) -> qcode:Q_KEY_CODE_F (f) */\n+ [0x47] = Q_KEY_CODE_G, /* win32:71 (VK_G) -> linux:34 (KEY_G) -> qcode:Q_KEY_CODE_G (g) */\n+ [0x48] = Q_KEY_CODE_H, /* win32:72 (VK_H) -> linux:35 (KEY_H) -> qcode:Q_KEY_CODE_H (h) */\n+ [0x49] = Q_KEY_CODE_I, /* win32:73 (VK_I) -> linux:23 (KEY_I) -> qcode:Q_KEY_CODE_I (i) */\n+ [0x4a] = Q_KEY_CODE_J, /* win32:74 (VK_J) -> linux:36 (KEY_J) -> qcode:Q_KEY_CODE_J (j) */\n+ [0x4b] = Q_KEY_CODE_K, /* win32:75 (VK_K) -> linux:37 (KEY_K) -> qcode:Q_KEY_CODE_K (k) */\n+ [0x4c] = Q_KEY_CODE_L, /* win32:76 (VK_L) -> linux:38 (KEY_L) -> qcode:Q_KEY_CODE_L (l) */\n+ [0x4d] = Q_KEY_CODE_M, /* win32:77 (VK_M) -> linux:50 (KEY_M) -> qcode:Q_KEY_CODE_M (m) */\n+ [0x4e] = Q_KEY_CODE_N, /* win32:78 (VK_N) -> linux:49 (KEY_N) -> qcode:Q_KEY_CODE_N (n) */\n+ [0x4f] = Q_KEY_CODE_O, /* win32:79 (VK_O) -> linux:24 (KEY_O) -> qcode:Q_KEY_CODE_O (o) */\n+ [0x50] = Q_KEY_CODE_P, /* win32:80 (VK_P) -> linux:25 (KEY_P) -> qcode:Q_KEY_CODE_P (p) */\n+ [0x51] = Q_KEY_CODE_Q, /* win32:81 (VK_Q) -> linux:16 (KEY_Q) -> qcode:Q_KEY_CODE_Q (q) */\n+ [0x52] = Q_KEY_CODE_R, /* win32:82 (VK_R) -> linux:19 (KEY_R) -> qcode:Q_KEY_CODE_R (r) */\n+ [0x53] = Q_KEY_CODE_S, /* win32:83 (VK_S) -> linux:31 (KEY_S) -> qcode:Q_KEY_CODE_S (s) */\n+ [0x54] = Q_KEY_CODE_T, /* win32:84 (VK_T) -> linux:20 (KEY_T) -> qcode:Q_KEY_CODE_T (t) */\n+ [0x55] = Q_KEY_CODE_U, /* win32:85 (VK_U) -> linux:22 (KEY_U) -> qcode:Q_KEY_CODE_U (u) */\n+ [0x56] = Q_KEY_CODE_V, /* win32:86 (VK_V) -> linux:47 (KEY_V) -> qcode:Q_KEY_CODE_V (v) */\n+ [0x57] = Q_KEY_CODE_W, /* win32:87 (VK_W) -> linux:17 (KEY_W) -> qcode:Q_KEY_CODE_W (w) */\n+ [0x58] = Q_KEY_CODE_X, /* win32:88 (VK_X) -> linux:45 (KEY_X) -> qcode:Q_KEY_CODE_X (x) */\n+ [0x59] = Q_KEY_CODE_Y, /* win32:89 (VK_Y) -> linux:21 (KEY_Y) -> qcode:Q_KEY_CODE_Y (y) */\n+ [0x5a] = Q_KEY_CODE_Z, /* win32:90 (VK_Z) -> linux:44 (KEY_Z) -> qcode:Q_KEY_CODE_Z (z) */\n+ [0x5b] = Q_KEY_CODE_META_L, /* win32:91 (VK_LWIN) -> linux:125 (KEY_LEFTMETA) -> qcode:Q_KEY_CODE_META_L (meta_l) */\n+ [0x5c] = Q_KEY_CODE_META_R, /* win32:92 (VK_RWIN) -> linux:126 (KEY_RIGHTMETA) -> qcode:Q_KEY_CODE_META_R (meta_r) */\n+ [0x5d] = Q_KEY_CODE_COMPOSE, /* win32:93 (VK_APPS) -> linux:127 (KEY_COMPOSE) -> qcode:Q_KEY_CODE_COMPOSE (compose) */\n+ [0x5f] = Q_KEY_CODE_SLEEP, /* win32:95 (VK_SLEEP) -> linux:142 (KEY_SLEEP) -> qcode:Q_KEY_CODE_SLEEP (sleep) */\n+ [0x60] = Q_KEY_CODE_KP_0, /* win32:96 (VK_NUMPAD0) -> linux:82 (KEY_KP0) -> qcode:Q_KEY_CODE_KP_0 (kp_0) */\n+ [0x61] = Q_KEY_CODE_KP_1, /* win32:97 (VK_NUMPAD1) -> linux:79 (KEY_KP1) -> qcode:Q_KEY_CODE_KP_1 (kp_1) */\n+ [0x62] = Q_KEY_CODE_KP_2, /* win32:98 (VK_NUMPAD2) -> linux:80 (KEY_KP2) -> qcode:Q_KEY_CODE_KP_2 (kp_2) */\n+ [0x63] = Q_KEY_CODE_KP_3, /* win32:99 (VK_NUMPAD3) -> linux:81 (KEY_KP3) -> qcode:Q_KEY_CODE_KP_3 (kp_3) */\n+ [0x64] = Q_KEY_CODE_KP_4, /* win32:100 (VK_NUMPAD4) -> linux:75 (KEY_KP4) -> qcode:Q_KEY_CODE_KP_4 (kp_4) */\n+ [0x65] = Q_KEY_CODE_KP_5, /* win32:101 (VK_NUMPAD5) -> linux:76 (KEY_KP5) -> qcode:Q_KEY_CODE_KP_5 (kp_5) */\n+ [0x66] = Q_KEY_CODE_KP_6, /* win32:102 (VK_NUMPAD6) -> linux:77 (KEY_KP6) -> qcode:Q_KEY_CODE_KP_6 (kp_6) */\n+ [0x67] = Q_KEY_CODE_KP_7, /* win32:103 (VK_NUMPAD7) -> linux:71 (KEY_KP7) -> qcode:Q_KEY_CODE_KP_7 (kp_7) */\n+ [0x68] = Q_KEY_CODE_KP_8, /* win32:104 (VK_NUMPAD8) -> linux:72 (KEY_KP8) -> qcode:Q_KEY_CODE_KP_8 (kp_8) */\n+ [0x69] = Q_KEY_CODE_KP_9, /* win32:105 (VK_NUMPAD9) -> linux:73 (KEY_KP9) -> qcode:Q_KEY_CODE_KP_9 (kp_9) */\n+ [0x6a] = Q_KEY_CODE_KP_MULTIPLY, /* win32:106 (VK_MULTIPLY) -> linux:55 (KEY_KPASTERISK) -> qcode:Q_KEY_CODE_KP_MULTIPLY (kp_multiply) */\n+ [0x6b] = Q_KEY_CODE_KP_ADD, /* win32:107 (VK_ADD) -> linux:78 (KEY_KPPLUS) -> qcode:Q_KEY_CODE_KP_ADD (kp_add) */\n+ [0x6c] = Q_KEY_CODE_KP_COMMA, /* win32:108 (VK_SEPARATOR??) -> linux:121 (KEY_KPCOMMA) -> qcode:Q_KEY_CODE_KP_COMMA (kp_comma) */\n+ [0x6d] = Q_KEY_CODE_KP_SUBTRACT, /* win32:109 (VK_SUBTRACT) -> linux:74 (KEY_KPMINUS) -> qcode:Q_KEY_CODE_KP_SUBTRACT (kp_subtract) */\n+ [0x6e] = Q_KEY_CODE_KP_DECIMAL, /* win32:110 (VK_DECIMAL) -> linux:83 (KEY_KPDOT) -> qcode:Q_KEY_CODE_KP_DECIMAL (kp_decimal) */\n+ [0x6f] = Q_KEY_CODE_KP_DIVIDE, /* win32:111 (VK_DIVIDE) -> linux:98 (KEY_KPSLASH) -> qcode:Q_KEY_CODE_KP_DIVIDE (kp_divide) */\n+ [0x70] = Q_KEY_CODE_F1, /* win32:112 (VK_F1) -> linux:59 (KEY_F1) -> qcode:Q_KEY_CODE_F1 (f1) */\n+ [0x71] = Q_KEY_CODE_F2, /* win32:113 (VK_F2) -> linux:60 (KEY_F2) -> qcode:Q_KEY_CODE_F2 (f2) */\n+ [0x72] = Q_KEY_CODE_F3, /* win32:114 (VK_F3) -> linux:61 (KEY_F3) -> qcode:Q_KEY_CODE_F3 (f3) */\n+ [0x73] = Q_KEY_CODE_F4, /* win32:115 (VK_F4) -> linux:62 (KEY_F4) -> qcode:Q_KEY_CODE_F4 (f4) */\n+ [0x74] = Q_KEY_CODE_F5, /* win32:116 (VK_F5) -> linux:63 (KEY_F5) -> qcode:Q_KEY_CODE_F5 (f5) */\n+ [0x75] = Q_KEY_CODE_F6, /* win32:117 (VK_F6) -> linux:64 (KEY_F6) -> qcode:Q_KEY_CODE_F6 (f6) */\n+ [0x76] = Q_KEY_CODE_F7, /* win32:118 (VK_F7) -> linux:65 (KEY_F7) -> qcode:Q_KEY_CODE_F7 (f7) */\n+ [0x77] = Q_KEY_CODE_F8, /* win32:119 (VK_F8) -> linux:66 (KEY_F8) -> qcode:Q_KEY_CODE_F8 (f8) */\n+ [0x78] = Q_KEY_CODE_F9, /* win32:120 (VK_F9) -> linux:67 (KEY_F9) -> qcode:Q_KEY_CODE_F9 (f9) */\n+ [0x79] = Q_KEY_CODE_F10, /* win32:121 (VK_F10) -> linux:68 (KEY_F10) -> qcode:Q_KEY_CODE_F10 (f10) */\n+ [0x7a] = Q_KEY_CODE_F11, /* win32:122 (VK_F11) -> linux:87 (KEY_F11) -> qcode:Q_KEY_CODE_F11 (f11) */\n+ [0x7b] = Q_KEY_CODE_F12, /* win32:123 (VK_F12) -> linux:88 (KEY_F12) -> qcode:Q_KEY_CODE_F12 (f12) */\n+ [0x7c] = Q_KEY_CODE_UNMAPPED, /* win32:124 (VK_F13) -> linux:183 (KEY_F13) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x7d] = Q_KEY_CODE_UNMAPPED, /* win32:125 (VK_F14) -> linux:184 (KEY_F14) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x7e] = Q_KEY_CODE_UNMAPPED, /* win32:126 (VK_F15) -> linux:185 (KEY_F15) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x7f] = Q_KEY_CODE_UNMAPPED, /* win32:127 (VK_F16) -> linux:186 (KEY_F16) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x80] = Q_KEY_CODE_UNMAPPED, /* win32:128 (VK_F17) -> linux:187 (KEY_F17) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x81] = Q_KEY_CODE_UNMAPPED, /* win32:129 (VK_F18) -> linux:188 (KEY_F18) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x82] = Q_KEY_CODE_UNMAPPED, /* win32:130 (VK_F19) -> linux:189 (KEY_F19) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x83] = Q_KEY_CODE_UNMAPPED, /* win32:131 (VK_F20) -> linux:190 (KEY_F20) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x84] = Q_KEY_CODE_UNMAPPED, /* win32:132 (VK_F21) -> linux:191 (KEY_F21) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x85] = Q_KEY_CODE_UNMAPPED, /* win32:133 (VK_F22) -> linux:192 (KEY_F22) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x86] = Q_KEY_CODE_UNMAPPED, /* win32:134 (VK_F23) -> linux:193 (KEY_F23) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x87] = Q_KEY_CODE_UNMAPPED, /* win32:135 (VK_F24) -> linux:194 (KEY_F24) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x90] = Q_KEY_CODE_NUM_LOCK, /* win32:144 (VK_NUMLOCK) -> linux:69 (KEY_NUMLOCK) -> qcode:Q_KEY_CODE_NUM_LOCK (num_lock) */\n+ [0x91] = Q_KEY_CODE_SCROLL_LOCK, /* win32:145 (VK_SCROLL) -> linux:70 (KEY_SCROLLLOCK) -> qcode:Q_KEY_CODE_SCROLL_LOCK (scroll_lock) */\n+ [0xa0] = Q_KEY_CODE_SHIFT, /* win32:160 (VK_LSHIFT) -> linux:42 (KEY_LEFTSHIFT) -> qcode:Q_KEY_CODE_SHIFT (shift) */\n+ [0xa1] = Q_KEY_CODE_SHIFT_R, /* win32:161 (VK_RSHIFT) -> linux:54 (KEY_RIGHTSHIFT) -> qcode:Q_KEY_CODE_SHIFT_R (shift_r) */\n+ [0xa2] = Q_KEY_CODE_CTRL, /* win32:162 (VK_CONTROL) -> linux:29 (KEY_LEFTCTRL) -> qcode:Q_KEY_CODE_CTRL (ctrl) */\n+ [0xa3] = Q_KEY_CODE_CTRL_R, /* win32:163 (VK_RCONTROL) -> linux:97 (KEY_RIGHTCTRL) -> qcode:Q_KEY_CODE_CTRL_R (ctrl_r) */\n+ [0xa4] = Q_KEY_CODE_ALT, /* win32:164 (VK_MENU) -> linux:56 (KEY_LEFTALT) -> qcode:Q_KEY_CODE_ALT (alt) */\n+ [0xa5] = Q_KEY_CODE_ALT_R, /* win32:165 (VK_RMENU) -> linux:100 (KEY_RIGHTALT) -> qcode:Q_KEY_CODE_ALT_R (alt_r) */\n+ [0xa6] = Q_KEY_CODE_AC_BACK, /* win32:166 (VK_BROWSER_BACK) -> linux:158 (KEY_BACK) -> qcode:Q_KEY_CODE_AC_BACK (ac_back) */\n+ [0xa7] = Q_KEY_CODE_AC_FORWARD, /* win32:167 (VK_BROWSER_FORWARD) -> linux:159 (KEY_FORWARD) -> qcode:Q_KEY_CODE_AC_FORWARD (ac_forward) */\n+ [0xa8] = Q_KEY_CODE_AC_REFRESH, /* win32:168 (VK_BROWSER_REFRESH) -> linux:173 (KEY_REFRESH) -> qcode:Q_KEY_CODE_AC_REFRESH (ac_refresh) */\n+ [0xa9] = Q_KEY_CODE_STOP, /* win32:169 (VK_BROWSER_STOP) -> linux:128 (KEY_STOP) -> qcode:Q_KEY_CODE_STOP (stop) */\n+ [0xaa] = Q_KEY_CODE_UNMAPPED, /* win32:170 (VK_BROWSER_SEARCH) -> linux:217 (KEY_SEARCH) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xab] = Q_KEY_CODE_UNMAPPED, /* win32:171 (VK_BROWSER_FAVOURITES) -> linux:364 (KEY_FAVORITES) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xac] = Q_KEY_CODE_AC_HOME, /* win32:172 (VK_BROWSER_HOME) -> linux:172 (KEY_HOMEPAGE) -> qcode:Q_KEY_CODE_AC_HOME (ac_home) */\n+ [0xad] = Q_KEY_CODE_AUDIOMUTE, /* win32:173 (VK_VOLUME_MUTE) -> linux:113 (KEY_MUTE) -> qcode:Q_KEY_CODE_AUDIOMUTE (audiomute) */\n+ [0xae] = Q_KEY_CODE_VOLUMEDOWN, /* win32:174 (VK_VOLUME_DOWN) -> linux:114 (KEY_VOLUMEDOWN) -> qcode:Q_KEY_CODE_VOLUMEDOWN (volumedown) */\n+ [0xaf] = Q_KEY_CODE_VOLUMEUP, /* win32:175 (VK_VOLUME_UP) -> linux:115 (KEY_VOLUMEUP) -> qcode:Q_KEY_CODE_VOLUMEUP (volumeup) */\n+ [0xb0] = Q_KEY_CODE_AUDIONEXT, /* win32:176 (VK_MEDIA_NEXT_TRACK) -> linux:163 (KEY_NEXTSONG) -> qcode:Q_KEY_CODE_AUDIONEXT (audionext) */\n+ [0xb1] = Q_KEY_CODE_AUDIOPREV, /* win32:177 (VK_MEDIA_PREV_TRACK) -> linux:165 (KEY_PREVIOUSSONG) -> qcode:Q_KEY_CODE_AUDIOPREV (audioprev) */\n+ [0xb2] = Q_KEY_CODE_AUDIOSTOP, /* win32:178 (VK_MEDIA_STOP) -> linux:166 (KEY_STOPCD) -> qcode:Q_KEY_CODE_AUDIOSTOP (audiostop) */\n+ [0xb3] = Q_KEY_CODE_AUDIOPLAY, /* win32:179 (VK_MEDIA_PLAY_PAUSE) -> linux:164 (KEY_PLAYPAUSE) -> qcode:Q_KEY_CODE_AUDIOPLAY (audioplay) */\n+ [0xb4] = Q_KEY_CODE_UNMAPPED, /* win32:180 (VK_LAUNCH_MAIL) -> linux:215 (KEY_EMAIL) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xba] = Q_KEY_CODE_SEMICOLON, /* win32:186 (VK_OEM_1) -> linux:39 (KEY_SEMICOLON) -> qcode:Q_KEY_CODE_SEMICOLON (semicolon) */\n+ [0xbb] = Q_KEY_CODE_EQUAL, /* win32:187 (VK_OEM_PLUS) -> linux:13 (KEY_EQUAL) -> qcode:Q_KEY_CODE_EQUAL (equal) */\n+ [0xbc] = Q_KEY_CODE_COMMA, /* win32:188 (VK_OEM_COMMA) -> linux:51 (KEY_COMMA) -> qcode:Q_KEY_CODE_COMMA (comma) */\n+ [0xbd] = Q_KEY_CODE_MINUS, /* win32:189 (VK_OEM_MINUS) -> linux:12 (KEY_MINUS) -> qcode:Q_KEY_CODE_MINUS (minus) */\n+ [0xbe] = Q_KEY_CODE_DOT, /* win32:190 (VK_OEM_PERIOD) -> linux:52 (KEY_DOT) -> qcode:Q_KEY_CODE_DOT (dot) */\n+ [0xbf] = Q_KEY_CODE_SLASH, /* win32:191 (VK_OEM_2) -> linux:53 (KEY_SLASH) -> qcode:Q_KEY_CODE_SLASH (slash) */\n+ [0xc0] = Q_KEY_CODE_GRAVE_ACCENT, /* win32:192 (VK_OEM_3) -> linux:41 (KEY_GRAVE) -> qcode:Q_KEY_CODE_GRAVE_ACCENT (grave_accent) */\n+ [0xdb] = Q_KEY_CODE_BRACKET_LEFT, /* win32:219 (VK_OEM_4) -> linux:26 (KEY_LEFTBRACE) -> qcode:Q_KEY_CODE_BRACKET_LEFT (bracket_left) */\n+ [0xdc] = Q_KEY_CODE_BACKSLASH, /* win32:220 (VK_OEM_5) -> linux:43 (KEY_BACKSLASH) -> qcode:Q_KEY_CODE_BACKSLASH (backslash) */\n+ [0xdd] = Q_KEY_CODE_BRACKET_RIGHT, /* win32:221 (VK_OEM_6) -> linux:27 (KEY_RIGHTBRACE) -> qcode:Q_KEY_CODE_BRACKET_RIGHT (bracket_right) */\n+ [0xde] = Q_KEY_CODE_APOSTROPHE, /* win32:222 (VK_OEM_7) -> linux:40 (KEY_APOSTROPHE) -> qcode:Q_KEY_CODE_APOSTROPHE (apostrophe) */\n+ [0xe1] = Q_KEY_CODE_LESS, /* win32:225 (VK_OEM_102) -> linux:86 (KEY_102ND) -> qcode:Q_KEY_CODE_LESS (less) */\n+ [0xfa] = Q_KEY_CODE_UNMAPPED, /* win32:250 (VK_PLAY) -> linux:207 (KEY_PLAY) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xfb] = Q_KEY_CODE_UNMAPPED, /* win32:251 (VK_ZOOM) -> linux:372 (KEY_ZOOM) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+};\n+const guint qemu_input_map_win32_to_qcode_len = sizeof(qemu_input_map_win32_to_qcode)/sizeof(qemu_input_map_win32_to_qcode[0]);\ndiff --git a/ui/input-keymap-x11-to-qcode.c b/ui/input-keymap-x11-to-qcode.c\nnew file mode 100644\nindex 0000000000..5802a1d052\n--- /dev/null\n+++ b/ui/input-keymap-x11-to-qcode.c\n@@ -0,0 +1,163 @@\n+/*\n+ * This file is auto-generated from keymaps.csv on 2017-08-31 11:08\n+ * Database checksum sha256(f8aeff0c3430077a350e3d7ba2b335b381bd929ac4b193413730a402ff3f0097)\n+ * To re-generate, run:\n+ * keymap-gen --lang=glib2 --varname=qemu_input_map_x11_to_qcode code-map keymaps.csv x11 qcode\n+*/\n+const guint16 qemu_input_map_x11_to_qcode[65536] = {\n+ [0x20] = Q_KEY_CODE_SPC, /* x11:32 (XK_space) -> linux:57 (KEY_SPACE) -> qcode:Q_KEY_CODE_SPC (spc) */\n+ [0x21] = Q_KEY_CODE_1, /* x11:33 (XK_exclam) -> linux:2 (KEY_1) -> qcode:Q_KEY_CODE_1 (1) */\n+ [0x22] = Q_KEY_CODE_APOSTROPHE, /* x11:34 (XK_quotedbl) -> linux:40 (KEY_APOSTROPHE) -> qcode:Q_KEY_CODE_APOSTROPHE (apostrophe) */\n+ [0x23] = Q_KEY_CODE_3, /* x11:35 (XK_numbersign) -> linux:4 (KEY_3) -> qcode:Q_KEY_CODE_3 (3) */\n+ [0x24] = Q_KEY_CODE_4, /* x11:36 (XK_dollar) -> linux:5 (KEY_4) -> qcode:Q_KEY_CODE_4 (4) */\n+ [0x25] = Q_KEY_CODE_5, /* x11:37 (XK_percent) -> linux:6 (KEY_5) -> qcode:Q_KEY_CODE_5 (5) */\n+ [0x26] = Q_KEY_CODE_7, /* x11:38 (XK_ampersand) -> linux:8 (KEY_7) -> qcode:Q_KEY_CODE_7 (7) */\n+ [0x27] = Q_KEY_CODE_APOSTROPHE, /* x11:39 (XK_quotedbl) -> linux:40 (KEY_APOSTROPHE) -> qcode:Q_KEY_CODE_APOSTROPHE (apostrophe) */\n+ [0x28] = Q_KEY_CODE_9, /* x11:40 (XK_parenleft) -> linux:10 (KEY_9) -> qcode:Q_KEY_CODE_9 (9) */\n+ [0x29] = Q_KEY_CODE_0, /* x11:41 (XK_parenright) -> linux:11 (KEY_0) -> qcode:Q_KEY_CODE_0 (0) */\n+ [0x2a] = Q_KEY_CODE_8, /* x11:42 (XK_asterisk) -> linux:9 (KEY_8) -> qcode:Q_KEY_CODE_8 (8) */\n+ [0x2b] = Q_KEY_CODE_EQUAL, /* x11:43 (XK_plus) -> linux:13 (KEY_EQUAL) -> qcode:Q_KEY_CODE_EQUAL (equal) */\n+ [0x2c] = Q_KEY_CODE_COMMA, /* x11:44 (XK_less) -> linux:51 (KEY_COMMA) -> qcode:Q_KEY_CODE_COMMA (comma) */\n+ [0x2d] = Q_KEY_CODE_MINUS, /* x11:45 (XK_underscore) -> linux:12 (KEY_MINUS) -> qcode:Q_KEY_CODE_MINUS (minus) */\n+ [0x2e] = Q_KEY_CODE_DOT, /* x11:46 (XK_greater) -> linux:52 (KEY_DOT) -> qcode:Q_KEY_CODE_DOT (dot) */\n+ [0x2f] = Q_KEY_CODE_SLASH, /* x11:47 (XK_question) -> linux:53 (KEY_SLASH) -> qcode:Q_KEY_CODE_SLASH (slash) */\n+ [0x30] = Q_KEY_CODE_0, /* x11:48 (XK_parenright) -> linux:11 (KEY_0) -> qcode:Q_KEY_CODE_0 (0) */\n+ [0x31] = Q_KEY_CODE_1, /* x11:49 (XK_exclam) -> linux:2 (KEY_1) -> qcode:Q_KEY_CODE_1 (1) */\n+ [0x32] = Q_KEY_CODE_2, /* x11:50 (XK_at) -> linux:3 (KEY_2) -> qcode:Q_KEY_CODE_2 (2) */\n+ [0x33] = Q_KEY_CODE_3, /* x11:51 (XK_numbersign) -> linux:4 (KEY_3) -> qcode:Q_KEY_CODE_3 (3) */\n+ [0x34] = Q_KEY_CODE_4, /* x11:52 (XK_dollar) -> linux:5 (KEY_4) -> qcode:Q_KEY_CODE_4 (4) */\n+ [0x35] = Q_KEY_CODE_5, /* x11:53 (XK_percent) -> linux:6 (KEY_5) -> qcode:Q_KEY_CODE_5 (5) */\n+ [0x36] = Q_KEY_CODE_6, /* x11:54 (XK_asciicircum) -> linux:7 (KEY_6) -> qcode:Q_KEY_CODE_6 (6) */\n+ [0x37] = Q_KEY_CODE_7, /* x11:55 (XK_ampersand) -> linux:8 (KEY_7) -> qcode:Q_KEY_CODE_7 (7) */\n+ [0x38] = Q_KEY_CODE_8, /* x11:56 (XK_asterisk) -> linux:9 (KEY_8) -> qcode:Q_KEY_CODE_8 (8) */\n+ [0x39] = Q_KEY_CODE_9, /* x11:57 (XK_parenleft) -> linux:10 (KEY_9) -> qcode:Q_KEY_CODE_9 (9) */\n+ [0x3a] = Q_KEY_CODE_SEMICOLON, /* x11:58 (XK_colon) -> linux:39 (KEY_SEMICOLON) -> qcode:Q_KEY_CODE_SEMICOLON (semicolon) */\n+ [0x3b] = Q_KEY_CODE_SEMICOLON, /* x11:59 (XK_colon) -> linux:39 (KEY_SEMICOLON) -> qcode:Q_KEY_CODE_SEMICOLON (semicolon) */\n+ [0x3c] = Q_KEY_CODE_COMMA, /* x11:60 (XK_less) -> linux:51 (KEY_COMMA) -> qcode:Q_KEY_CODE_COMMA (comma) */\n+ [0x3d] = Q_KEY_CODE_EQUAL, /* x11:61 (XK_plus) -> linux:13 (KEY_EQUAL) -> qcode:Q_KEY_CODE_EQUAL (equal) */\n+ [0x3e] = Q_KEY_CODE_DOT, /* x11:62 (XK_greater) -> linux:52 (KEY_DOT) -> qcode:Q_KEY_CODE_DOT (dot) */\n+ [0x3f] = Q_KEY_CODE_SLASH, /* x11:63 (XK_question) -> linux:53 (KEY_SLASH) -> qcode:Q_KEY_CODE_SLASH (slash) */\n+ [0x40] = Q_KEY_CODE_2, /* x11:64 (XK_at) -> linux:3 (KEY_2) -> qcode:Q_KEY_CODE_2 (2) */\n+ [0x41] = Q_KEY_CODE_A, /* x11:65 (XK_a) -> linux:30 (KEY_A) -> qcode:Q_KEY_CODE_A (a) */\n+ [0x42] = Q_KEY_CODE_B, /* x11:66 (XK_b) -> linux:48 (KEY_B) -> qcode:Q_KEY_CODE_B (b) */\n+ [0x43] = Q_KEY_CODE_C, /* x11:67 (XK_c) -> linux:46 (KEY_C) -> qcode:Q_KEY_CODE_C (c) */\n+ [0x44] = Q_KEY_CODE_D, /* x11:68 (XK_d) -> linux:32 (KEY_D) -> qcode:Q_KEY_CODE_D (d) */\n+ [0x45] = Q_KEY_CODE_E, /* x11:69 (XK_e) -> linux:18 (KEY_E) -> qcode:Q_KEY_CODE_E (e) */\n+ [0x46] = Q_KEY_CODE_F, /* x11:70 (XK_f) -> linux:33 (KEY_F) -> qcode:Q_KEY_CODE_F (f) */\n+ [0x47] = Q_KEY_CODE_G, /* x11:71 (XK_g) -> linux:34 (KEY_G) -> qcode:Q_KEY_CODE_G (g) */\n+ [0x48] = Q_KEY_CODE_H, /* x11:72 (XK_h) -> linux:35 (KEY_H) -> qcode:Q_KEY_CODE_H (h) */\n+ [0x49] = Q_KEY_CODE_I, /* x11:73 (XK_i) -> linux:23 (KEY_I) -> qcode:Q_KEY_CODE_I (i) */\n+ [0x4a] = Q_KEY_CODE_J, /* x11:74 (XK_j) -> linux:36 (KEY_J) -> qcode:Q_KEY_CODE_J (j) */\n+ [0x4b] = Q_KEY_CODE_K, /* x11:75 (XK_k) -> linux:37 (KEY_K) -> qcode:Q_KEY_CODE_K (k) */\n+ [0x4c] = Q_KEY_CODE_L, /* x11:76 (XK_l) -> linux:38 (KEY_L) -> qcode:Q_KEY_CODE_L (l) */\n+ [0x4d] = Q_KEY_CODE_M, /* x11:77 (XK_m) -> linux:50 (KEY_M) -> qcode:Q_KEY_CODE_M (m) */\n+ [0x4e] = Q_KEY_CODE_N, /* x11:78 (XK_n) -> linux:49 (KEY_N) -> qcode:Q_KEY_CODE_N (n) */\n+ [0x4f] = Q_KEY_CODE_O, /* x11:79 (XK_o) -> linux:24 (KEY_O) -> qcode:Q_KEY_CODE_O (o) */\n+ [0x50] = Q_KEY_CODE_P, /* x11:80 (XK_p) -> linux:25 (KEY_P) -> qcode:Q_KEY_CODE_P (p) */\n+ [0x51] = Q_KEY_CODE_Q, /* x11:81 (XK_q) -> linux:16 (KEY_Q) -> qcode:Q_KEY_CODE_Q (q) */\n+ [0x52] = Q_KEY_CODE_R, /* x11:82 (XK_r) -> linux:19 (KEY_R) -> qcode:Q_KEY_CODE_R (r) */\n+ [0x53] = Q_KEY_CODE_S, /* x11:83 (XK_s) -> linux:31 (KEY_S) -> qcode:Q_KEY_CODE_S (s) */\n+ [0x54] = Q_KEY_CODE_T, /* x11:84 (XK_t) -> linux:20 (KEY_T) -> qcode:Q_KEY_CODE_T (t) */\n+ [0x55] = Q_KEY_CODE_U, /* x11:85 (XK_u) -> linux:22 (KEY_U) -> qcode:Q_KEY_CODE_U (u) */\n+ [0x56] = Q_KEY_CODE_V, /* x11:86 (XK_v) -> linux:47 (KEY_V) -> qcode:Q_KEY_CODE_V (v) */\n+ [0x57] = Q_KEY_CODE_W, /* x11:87 (XK_w) -> linux:17 (KEY_W) -> qcode:Q_KEY_CODE_W (w) */\n+ [0x58] = Q_KEY_CODE_X, /* x11:88 (XK_x) -> linux:45 (KEY_X) -> qcode:Q_KEY_CODE_X (x) */\n+ [0x59] = Q_KEY_CODE_Y, /* x11:89 (XK_y) -> linux:21 (KEY_Y) -> qcode:Q_KEY_CODE_Y (y) */\n+ [0x5a] = Q_KEY_CODE_Z, /* x11:90 (XK_z) -> linux:44 (KEY_Z) -> qcode:Q_KEY_CODE_Z (z) */\n+ [0x5b] = Q_KEY_CODE_BRACKET_LEFT, /* x11:91 (XK_braceleft) -> linux:26 (KEY_LEFTBRACE) -> qcode:Q_KEY_CODE_BRACKET_LEFT (bracket_left) */\n+ [0x5c] = Q_KEY_CODE_BACKSLASH, /* x11:92 (XK_bar) -> linux:43 (KEY_BACKSLASH) -> qcode:Q_KEY_CODE_BACKSLASH (backslash) */\n+ [0x5d] = Q_KEY_CODE_BRACKET_RIGHT, /* x11:93 (XK_braceright) -> linux:27 (KEY_RIGHTBRACE) -> qcode:Q_KEY_CODE_BRACKET_RIGHT (bracket_right) */\n+ [0x5e] = Q_KEY_CODE_6, /* x11:94 (XK_asciicircum) -> linux:7 (KEY_6) -> qcode:Q_KEY_CODE_6 (6) */\n+ [0x5f] = Q_KEY_CODE_MINUS, /* x11:95 (XK_underscore) -> linux:12 (KEY_MINUS) -> qcode:Q_KEY_CODE_MINUS (minus) */\n+ [0x60] = Q_KEY_CODE_GRAVE_ACCENT, /* x11:96 (XK_asciitilde) -> linux:41 (KEY_GRAVE) -> qcode:Q_KEY_CODE_GRAVE_ACCENT (grave_accent) */\n+ [0x61] = Q_KEY_CODE_A, /* x11:97 (XK_a) -> linux:30 (KEY_A) -> qcode:Q_KEY_CODE_A (a) */\n+ [0x62] = Q_KEY_CODE_B, /* x11:98 (XK_b) -> linux:48 (KEY_B) -> qcode:Q_KEY_CODE_B (b) */\n+ [0x63] = Q_KEY_CODE_C, /* x11:99 (XK_c) -> linux:46 (KEY_C) -> qcode:Q_KEY_CODE_C (c) */\n+ [0x64] = Q_KEY_CODE_D, /* x11:100 (XK_d) -> linux:32 (KEY_D) -> qcode:Q_KEY_CODE_D (d) */\n+ [0x65] = Q_KEY_CODE_E, /* x11:101 (XK_e) -> linux:18 (KEY_E) -> qcode:Q_KEY_CODE_E (e) */\n+ [0x66] = Q_KEY_CODE_F, /* x11:102 (XK_f) -> linux:33 (KEY_F) -> qcode:Q_KEY_CODE_F (f) */\n+ [0x67] = Q_KEY_CODE_G, /* x11:103 (XK_g) -> linux:34 (KEY_G) -> qcode:Q_KEY_CODE_G (g) */\n+ [0x68] = Q_KEY_CODE_H, /* x11:104 (XK_h) -> linux:35 (KEY_H) -> qcode:Q_KEY_CODE_H (h) */\n+ [0x69] = Q_KEY_CODE_I, /* x11:105 (XK_i) -> linux:23 (KEY_I) -> qcode:Q_KEY_CODE_I (i) */\n+ [0x6a] = Q_KEY_CODE_J, /* x11:106 (XK_j) -> linux:36 (KEY_J) -> qcode:Q_KEY_CODE_J (j) */\n+ [0x6b] = Q_KEY_CODE_K, /* x11:107 (XK_k) -> linux:37 (KEY_K) -> qcode:Q_KEY_CODE_K (k) */\n+ [0x6c] = Q_KEY_CODE_L, /* x11:108 (XK_l) -> linux:38 (KEY_L) -> qcode:Q_KEY_CODE_L (l) */\n+ [0x6d] = Q_KEY_CODE_M, /* x11:109 (XK_m) -> linux:50 (KEY_M) -> qcode:Q_KEY_CODE_M (m) */\n+ [0x6e] = Q_KEY_CODE_N, /* x11:110 (XK_n) -> linux:49 (KEY_N) -> qcode:Q_KEY_CODE_N (n) */\n+ [0x6f] = Q_KEY_CODE_O, /* x11:111 (XK_o) -> linux:24 (KEY_O) -> qcode:Q_KEY_CODE_O (o) */\n+ [0x70] = Q_KEY_CODE_P, /* x11:112 (XK_p) -> linux:25 (KEY_P) -> qcode:Q_KEY_CODE_P (p) */\n+ [0x71] = Q_KEY_CODE_Q, /* x11:113 (XK_q) -> linux:16 (KEY_Q) -> qcode:Q_KEY_CODE_Q (q) */\n+ [0x72] = Q_KEY_CODE_R, /* x11:114 (XK_r) -> linux:19 (KEY_R) -> qcode:Q_KEY_CODE_R (r) */\n+ [0x73] = Q_KEY_CODE_S, /* x11:115 (XK_s) -> linux:31 (KEY_S) -> qcode:Q_KEY_CODE_S (s) */\n+ [0x74] = Q_KEY_CODE_T, /* x11:116 (XK_t) -> linux:20 (KEY_T) -> qcode:Q_KEY_CODE_T (t) */\n+ [0x75] = Q_KEY_CODE_U, /* x11:117 (XK_u) -> linux:22 (KEY_U) -> qcode:Q_KEY_CODE_U (u) */\n+ [0x76] = Q_KEY_CODE_V, /* x11:118 (XK_v) -> linux:47 (KEY_V) -> qcode:Q_KEY_CODE_V (v) */\n+ [0x77] = Q_KEY_CODE_W, /* x11:119 (XK_w) -> linux:17 (KEY_W) -> qcode:Q_KEY_CODE_W (w) */\n+ [0x78] = Q_KEY_CODE_X, /* x11:120 (XK_x) -> linux:45 (KEY_X) -> qcode:Q_KEY_CODE_X (x) */\n+ [0x79] = Q_KEY_CODE_Y, /* x11:121 (XK_y) -> linux:21 (KEY_Y) -> qcode:Q_KEY_CODE_Y (y) */\n+ [0x7a] = Q_KEY_CODE_Z, /* x11:122 (XK_z) -> linux:44 (KEY_Z) -> qcode:Q_KEY_CODE_Z (z) */\n+ [0x7b] = Q_KEY_CODE_BRACKET_LEFT, /* x11:123 (XK_braceleft) -> linux:26 (KEY_LEFTBRACE) -> qcode:Q_KEY_CODE_BRACKET_LEFT (bracket_left) */\n+ [0x7c] = Q_KEY_CODE_BACKSLASH, /* x11:124 (XK_bar) -> linux:43 (KEY_BACKSLASH) -> qcode:Q_KEY_CODE_BACKSLASH (backslash) */\n+ [0x7d] = Q_KEY_CODE_BRACKET_RIGHT, /* x11:125 (XK_braceright) -> linux:27 (KEY_RIGHTBRACE) -> qcode:Q_KEY_CODE_BRACKET_RIGHT (bracket_right) */\n+ [0x7e] = Q_KEY_CODE_GRAVE_ACCENT, /* x11:126 (XK_asciitilde) -> linux:41 (KEY_GRAVE) -> qcode:Q_KEY_CODE_GRAVE_ACCENT (grave_accent) */\n+ [0xd7] = Q_KEY_CODE_KP_MULTIPLY, /* x11:215 (XK_multiply) -> linux:55 (KEY_KPASTERISK) -> qcode:Q_KEY_CODE_KP_MULTIPLY (kp_multiply) */\n+ [0xff08] = Q_KEY_CODE_BACKSPACE, /* x11:65288 (XK_BackSpace) -> linux:14 (KEY_BACKSPACE) -> qcode:Q_KEY_CODE_BACKSPACE (backspace) */\n+ [0xff09] = Q_KEY_CODE_TAB, /* x11:65289 (XK_Tab) -> linux:15 (KEY_TAB) -> qcode:Q_KEY_CODE_TAB (tab) */\n+ [0xff0d] = Q_KEY_CODE_RET, /* x11:65293 (XK_Return) -> linux:28 (KEY_ENTER) -> qcode:Q_KEY_CODE_RET (ret) */\n+ [0xff13] = Q_KEY_CODE_PAUSE, /* x11:65299 (XK_Pause) -> linux:119 (KEY_PAUSE) -> qcode:Q_KEY_CODE_PAUSE (pause) */\n+ [0xff14] = Q_KEY_CODE_SCROLL_LOCK, /* x11:65300 (XK_Scroll_Lock) -> linux:70 (KEY_SCROLLLOCK) -> qcode:Q_KEY_CODE_SCROLL_LOCK (scroll_lock) */\n+ [0xff15] = Q_KEY_CODE_SYSRQ, /* x11:65301 (XK_Sys_Req) -> linux:99 (KEY_SYSRQ) -> qcode:Q_KEY_CODE_SYSRQ (sysrq) */\n+ [0xff1b] = Q_KEY_CODE_ESC, /* x11:65307 (XK_Escape) -> linux:1 (KEY_ESC) -> qcode:Q_KEY_CODE_ESC (esc) */\n+ [0xff50] = Q_KEY_CODE_HOME, /* x11:65360 (XK_Home) -> linux:102 (KEY_HOME) -> qcode:Q_KEY_CODE_HOME (home) */\n+ [0xff51] = Q_KEY_CODE_LEFT, /* x11:65361 (XK_Left) -> linux:105 (KEY_LEFT) -> qcode:Q_KEY_CODE_LEFT (left) */\n+ [0xff52] = Q_KEY_CODE_UP, /* x11:65362 (XK_Up) -> linux:103 (KEY_UP) -> qcode:Q_KEY_CODE_UP (up) */\n+ [0xff53] = Q_KEY_CODE_RIGHT, /* x11:65363 (XK_Right) -> linux:106 (KEY_RIGHT) -> qcode:Q_KEY_CODE_RIGHT (right) */\n+ [0xff54] = Q_KEY_CODE_DOWN, /* x11:65364 (XK_Down) -> linux:108 (KEY_DOWN) -> qcode:Q_KEY_CODE_DOWN (down) */\n+ [0xff55] = Q_KEY_CODE_PGUP, /* x11:65365 (XK_Page_Up) -> linux:104 (KEY_PAGEUP) -> qcode:Q_KEY_CODE_PGUP (pgup) */\n+ [0xff56] = Q_KEY_CODE_PGDN, /* x11:65366 (XK_Page_Down) -> linux:109 (KEY_PAGEDOWN) -> qcode:Q_KEY_CODE_PGDN (pgdn) */\n+ [0xff57] = Q_KEY_CODE_END, /* x11:65367 (XK_End) -> linux:107 (KEY_END) -> qcode:Q_KEY_CODE_END (end) */\n+ [0xff60] = Q_KEY_CODE_UNMAPPED, /* x11:65376 (XK_Select) -> linux:353 (KEY_SELECT) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xff63] = Q_KEY_CODE_INSERT, /* x11:65379 (XK_Insert) -> linux:110 (KEY_INSERT) -> qcode:Q_KEY_CODE_INSERT (insert) */\n+ [0xff6a] = Q_KEY_CODE_HELP, /* x11:65386 (XK_Help) -> linux:138 (KEY_HELP) -> qcode:Q_KEY_CODE_HELP (help) */\n+ [0xff7f] = Q_KEY_CODE_NUM_LOCK, /* x11:65407 (XK_Num_Lock) -> linux:69 (KEY_NUMLOCK) -> qcode:Q_KEY_CODE_NUM_LOCK (num_lock) */\n+ [0xff8d] = Q_KEY_CODE_KP_ENTER, /* x11:65421 (XK_KP_Enter) -> linux:96 (KEY_KPENTER) -> qcode:Q_KEY_CODE_KP_ENTER (kp_enter) */\n+ [0xffab] = Q_KEY_CODE_KP_ADD, /* x11:65451 (XK_KP_Add) -> linux:78 (KEY_KPPLUS) -> qcode:Q_KEY_CODE_KP_ADD (kp_add) */\n+ [0xffac] = Q_KEY_CODE_UNMAPPED, /* x11:65452 (XK_KP_Separator) -> linux:95 (KEY_KPJPCOMMA) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xffad] = Q_KEY_CODE_KP_SUBTRACT, /* x11:65453 (XK_KP_Subtract) -> linux:74 (KEY_KPMINUS) -> qcode:Q_KEY_CODE_KP_SUBTRACT (kp_subtract) */\n+ [0xffae] = Q_KEY_CODE_KP_DECIMAL, /* x11:65454 (XK_KP_Decimal) -> linux:83 (KEY_KPDOT) -> qcode:Q_KEY_CODE_KP_DECIMAL (kp_decimal) */\n+ [0xffaf] = Q_KEY_CODE_KP_DIVIDE, /* x11:65455 (XK_KP_Divide) -> linux:98 (KEY_KPSLASH) -> qcode:Q_KEY_CODE_KP_DIVIDE (kp_divide) */\n+ [0xffb0] = Q_KEY_CODE_KP_0, /* x11:65456 (XK_KP_0) -> linux:82 (KEY_KP0) -> qcode:Q_KEY_CODE_KP_0 (kp_0) */\n+ [0xffb1] = Q_KEY_CODE_KP_1, /* x11:65457 (XK_KP_1) -> linux:79 (KEY_KP1) -> qcode:Q_KEY_CODE_KP_1 (kp_1) */\n+ [0xffb2] = Q_KEY_CODE_KP_2, /* x11:65458 (XK_KP_2) -> linux:80 (KEY_KP2) -> qcode:Q_KEY_CODE_KP_2 (kp_2) */\n+ [0xffb3] = Q_KEY_CODE_KP_3, /* x11:65459 (XK_KP_3) -> linux:81 (KEY_KP3) -> qcode:Q_KEY_CODE_KP_3 (kp_3) */\n+ [0xffb4] = Q_KEY_CODE_KP_4, /* x11:65460 (XK_KP_4) -> linux:75 (KEY_KP4) -> qcode:Q_KEY_CODE_KP_4 (kp_4) */\n+ [0xffb5] = Q_KEY_CODE_KP_5, /* x11:65461 (XK_KP_5) -> linux:76 (KEY_KP5) -> qcode:Q_KEY_CODE_KP_5 (kp_5) */\n+ [0xffb6] = Q_KEY_CODE_KP_6, /* x11:65462 (XK_KP_6) -> linux:77 (KEY_KP6) -> qcode:Q_KEY_CODE_KP_6 (kp_6) */\n+ [0xffb7] = Q_KEY_CODE_KP_7, /* x11:65463 (XK_KP_7) -> linux:71 (KEY_KP7) -> qcode:Q_KEY_CODE_KP_7 (kp_7) */\n+ [0xffb8] = Q_KEY_CODE_KP_8, /* x11:65464 (XK_KP_8) -> linux:72 (KEY_KP8) -> qcode:Q_KEY_CODE_KP_8 (kp_8) */\n+ [0xffb9] = Q_KEY_CODE_KP_9, /* x11:65465 (XK_KP_9) -> linux:73 (KEY_KP9) -> qcode:Q_KEY_CODE_KP_9 (kp_9) */\n+ [0xffbd] = Q_KEY_CODE_KP_EQUALS, /* x11:65469 (XK_KP_Equal) -> linux:117 (KEY_KPEQUAL) -> qcode:Q_KEY_CODE_KP_EQUALS (kp_equals) */\n+ [0xffbe] = Q_KEY_CODE_F1, /* x11:65470 (XK_F1) -> linux:59 (KEY_F1) -> qcode:Q_KEY_CODE_F1 (f1) */\n+ [0xffbf] = Q_KEY_CODE_F2, /* x11:65471 (XK_F2) -> linux:60 (KEY_F2) -> qcode:Q_KEY_CODE_F2 (f2) */\n+ [0xffc0] = Q_KEY_CODE_F3, /* x11:65472 (XK_F3) -> linux:61 (KEY_F3) -> qcode:Q_KEY_CODE_F3 (f3) */\n+ [0xffc1] = Q_KEY_CODE_F4, /* x11:65473 (XK_F4) -> linux:62 (KEY_F4) -> qcode:Q_KEY_CODE_F4 (f4) */\n+ [0xffc2] = Q_KEY_CODE_F5, /* x11:65474 (XK_F5) -> linux:63 (KEY_F5) -> qcode:Q_KEY_CODE_F5 (f5) */\n+ [0xffc3] = Q_KEY_CODE_F6, /* x11:65475 (XK_F6) -> linux:64 (KEY_F6) -> qcode:Q_KEY_CODE_F6 (f6) */\n+ [0xffc4] = Q_KEY_CODE_F7, /* x11:65476 (XK_F7) -> linux:65 (KEY_F7) -> qcode:Q_KEY_CODE_F7 (f7) */\n+ [0xffc5] = Q_KEY_CODE_F8, /* x11:65477 (XK_F8) -> linux:66 (KEY_F8) -> qcode:Q_KEY_CODE_F8 (f8) */\n+ [0xffc6] = Q_KEY_CODE_F9, /* x11:65478 (XK_F9) -> linux:67 (KEY_F9) -> qcode:Q_KEY_CODE_F9 (f9) */\n+ [0xffc7] = Q_KEY_CODE_F10, /* x11:65479 (XK_F10) -> linux:68 (KEY_F10) -> qcode:Q_KEY_CODE_F10 (f10) */\n+ [0xffc8] = Q_KEY_CODE_F11, /* x11:65480 (XK_F11) -> linux:87 (KEY_F11) -> qcode:Q_KEY_CODE_F11 (f11) */\n+ [0xffc9] = Q_KEY_CODE_F12, /* x11:65481 (XK_F12) -> linux:88 (KEY_F12) -> qcode:Q_KEY_CODE_F12 (f12) */\n+ [0xffe1] = Q_KEY_CODE_SHIFT, /* x11:65505 (XK_Shift_L) -> linux:42 (KEY_LEFTSHIFT) -> qcode:Q_KEY_CODE_SHIFT (shift) */\n+ [0xffe2] = Q_KEY_CODE_SHIFT_R, /* x11:65506 (XK_Shift_R) -> linux:54 (KEY_RIGHTSHIFT) -> qcode:Q_KEY_CODE_SHIFT_R (shift_r) */\n+ [0xffe3] = Q_KEY_CODE_CTRL, /* x11:65507 (XK_Control_L) -> linux:29 (KEY_LEFTCTRL) -> qcode:Q_KEY_CODE_CTRL (ctrl) */\n+ [0xffe4] = Q_KEY_CODE_CTRL_R, /* x11:65508 (XK_Control_R) -> linux:97 (KEY_RIGHTCTRL) -> qcode:Q_KEY_CODE_CTRL_R (ctrl_r) */\n+ [0xffe5] = Q_KEY_CODE_CAPS_LOCK, /* x11:65509 (XK_Caps_Lock) -> linux:58 (KEY_CAPSLOCK) -> qcode:Q_KEY_CODE_CAPS_LOCK (caps_lock) */\n+ [0xffe7] = Q_KEY_CODE_META_L, /* x11:65511 (XK_Meta_L) -> linux:125 (KEY_LEFTMETA) -> qcode:Q_KEY_CODE_META_L (meta_l) */\n+ [0xffe8] = Q_KEY_CODE_META_R, /* x11:65512 (XK_Meta_R) -> linux:126 (KEY_RIGHTMETA) -> qcode:Q_KEY_CODE_META_R (meta_r) */\n+ [0xffe9] = Q_KEY_CODE_ALT, /* x11:65513 (XK_Alt_L) -> linux:56 (KEY_LEFTALT) -> qcode:Q_KEY_CODE_ALT (alt) */\n+ [0xffea] = Q_KEY_CODE_ALT_R, /* x11:65514 (XK_Alt_R) -> linux:100 (KEY_RIGHTALT) -> qcode:Q_KEY_CODE_ALT_R (alt_r) */\n+ [0xffff] = Q_KEY_CODE_DELETE, /* x11:65535 (XK_Delete) -> linux:111 (KEY_DELETE) -> qcode:Q_KEY_CODE_DELETE (delete) */\n+};\n+const guint qemu_input_map_x11_to_qcode_len = sizeof(qemu_input_map_x11_to_qcode)/sizeof(qemu_input_map_x11_to_qcode[0]);\ndiff --git a/ui/input-keymap-xorgevdev-to-qcode.c b/ui/input-keymap-xorgevdev-to-qcode.c\nnew file mode 100644\nindex 0000000000..8e6de616d9\n--- /dev/null\n+++ b/ui/input-keymap-xorgevdev-to-qcode.c\n@@ -0,0 +1,463 @@\n+/*\n+ * This file is auto-generated from keymaps.csv on 2017-08-31 11:08\n+ * Database checksum sha256(f8aeff0c3430077a350e3d7ba2b335b381bd929ac4b193413730a402ff3f0097)\n+ * To re-generate, run:\n+ * keymap-gen --lang=glib2 --varname=qemu_input_map_xorgevdev_to_qcode code-map keymaps.csv xorgevdev qcode\n+*/\n+const guint16 qemu_input_map_xorgevdev_to_qcode[533] = {\n+ [0x8] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:8 -> linux:0 (KEY_RESERVED) -> qcode:Q_KEY_CODE_UNMAPPED (unmapped) */\n+ [0x9] = Q_KEY_CODE_ESC, /* xorgevdev:9 -> linux:1 (KEY_ESC) -> qcode:Q_KEY_CODE_ESC (esc) */\n+ [0xa] = Q_KEY_CODE_1, /* xorgevdev:10 -> linux:2 (KEY_1) -> qcode:Q_KEY_CODE_1 (1) */\n+ [0xb] = Q_KEY_CODE_2, /* xorgevdev:11 -> linux:3 (KEY_2) -> qcode:Q_KEY_CODE_2 (2) */\n+ [0xc] = Q_KEY_CODE_3, /* xorgevdev:12 -> linux:4 (KEY_3) -> qcode:Q_KEY_CODE_3 (3) */\n+ [0xd] = Q_KEY_CODE_4, /* xorgevdev:13 -> linux:5 (KEY_4) -> qcode:Q_KEY_CODE_4 (4) */\n+ [0xe] = Q_KEY_CODE_5, /* xorgevdev:14 -> linux:6 (KEY_5) -> qcode:Q_KEY_CODE_5 (5) */\n+ [0xf] = Q_KEY_CODE_6, /* xorgevdev:15 -> linux:7 (KEY_6) -> qcode:Q_KEY_CODE_6 (6) */\n+ [0x10] = Q_KEY_CODE_7, /* xorgevdev:16 -> linux:8 (KEY_7) -> qcode:Q_KEY_CODE_7 (7) */\n+ [0x11] = Q_KEY_CODE_8, /* xorgevdev:17 -> linux:9 (KEY_8) -> qcode:Q_KEY_CODE_8 (8) */\n+ [0x12] = Q_KEY_CODE_9, /* xorgevdev:18 -> linux:10 (KEY_9) -> qcode:Q_KEY_CODE_9 (9) */\n+ [0x13] = Q_KEY_CODE_0, /* xorgevdev:19 -> linux:11 (KEY_0) -> qcode:Q_KEY_CODE_0 (0) */\n+ [0x14] = Q_KEY_CODE_MINUS, /* xorgevdev:20 -> linux:12 (KEY_MINUS) -> qcode:Q_KEY_CODE_MINUS (minus) */\n+ [0x15] = Q_KEY_CODE_EQUAL, /* xorgevdev:21 -> linux:13 (KEY_EQUAL) -> qcode:Q_KEY_CODE_EQUAL (equal) */\n+ [0x16] = Q_KEY_CODE_BACKSPACE, /* xorgevdev:22 -> linux:14 (KEY_BACKSPACE) -> qcode:Q_KEY_CODE_BACKSPACE (backspace) */\n+ [0x17] = Q_KEY_CODE_TAB, /* xorgevdev:23 -> linux:15 (KEY_TAB) -> qcode:Q_KEY_CODE_TAB (tab) */\n+ [0x18] = Q_KEY_CODE_Q, /* xorgevdev:24 -> linux:16 (KEY_Q) -> qcode:Q_KEY_CODE_Q (q) */\n+ [0x19] = Q_KEY_CODE_W, /* xorgevdev:25 -> linux:17 (KEY_W) -> qcode:Q_KEY_CODE_W (w) */\n+ [0x1a] = Q_KEY_CODE_E, /* xorgevdev:26 -> linux:18 (KEY_E) -> qcode:Q_KEY_CODE_E (e) */\n+ [0x1b] = Q_KEY_CODE_R, /* xorgevdev:27 -> linux:19 (KEY_R) -> qcode:Q_KEY_CODE_R (r) */\n+ [0x1c] = Q_KEY_CODE_T, /* xorgevdev:28 -> linux:20 (KEY_T) -> qcode:Q_KEY_CODE_T (t) */\n+ [0x1d] = Q_KEY_CODE_Y, /* xorgevdev:29 -> linux:21 (KEY_Y) -> qcode:Q_KEY_CODE_Y (y) */\n+ [0x1e] = Q_KEY_CODE_U, /* xorgevdev:30 -> linux:22 (KEY_U) -> qcode:Q_KEY_CODE_U (u) */\n+ [0x1f] = Q_KEY_CODE_I, /* xorgevdev:31 -> linux:23 (KEY_I) -> qcode:Q_KEY_CODE_I (i) */\n+ [0x20] = Q_KEY_CODE_O, /* xorgevdev:32 -> linux:24 (KEY_O) -> qcode:Q_KEY_CODE_O (o) */\n+ [0x21] = Q_KEY_CODE_P, /* xorgevdev:33 -> linux:25 (KEY_P) -> qcode:Q_KEY_CODE_P (p) */\n+ [0x22] = Q_KEY_CODE_BRACKET_LEFT, /* xorgevdev:34 -> linux:26 (KEY_LEFTBRACE) -> qcode:Q_KEY_CODE_BRACKET_LEFT (bracket_left) */\n+ [0x23] = Q_KEY_CODE_BRACKET_RIGHT, /* xorgevdev:35 -> linux:27 (KEY_RIGHTBRACE) -> qcode:Q_KEY_CODE_BRACKET_RIGHT (bracket_right) */\n+ [0x24] = Q_KEY_CODE_RET, /* xorgevdev:36 -> linux:28 (KEY_ENTER) -> qcode:Q_KEY_CODE_RET (ret) */\n+ [0x25] = Q_KEY_CODE_CTRL, /* xorgevdev:37 -> linux:29 (KEY_LEFTCTRL) -> qcode:Q_KEY_CODE_CTRL (ctrl) */\n+ [0x26] = Q_KEY_CODE_A, /* xorgevdev:38 -> linux:30 (KEY_A) -> qcode:Q_KEY_CODE_A (a) */\n+ [0x27] = Q_KEY_CODE_S, /* xorgevdev:39 -> linux:31 (KEY_S) -> qcode:Q_KEY_CODE_S (s) */\n+ [0x28] = Q_KEY_CODE_D, /* xorgevdev:40 -> linux:32 (KEY_D) -> qcode:Q_KEY_CODE_D (d) */\n+ [0x29] = Q_KEY_CODE_F, /* xorgevdev:41 -> linux:33 (KEY_F) -> qcode:Q_KEY_CODE_F (f) */\n+ [0x2a] = Q_KEY_CODE_G, /* xorgevdev:42 -> linux:34 (KEY_G) -> qcode:Q_KEY_CODE_G (g) */\n+ [0x2b] = Q_KEY_CODE_H, /* xorgevdev:43 -> linux:35 (KEY_H) -> qcode:Q_KEY_CODE_H (h) */\n+ [0x2c] = Q_KEY_CODE_J, /* xorgevdev:44 -> linux:36 (KEY_J) -> qcode:Q_KEY_CODE_J (j) */\n+ [0x2d] = Q_KEY_CODE_K, /* xorgevdev:45 -> linux:37 (KEY_K) -> qcode:Q_KEY_CODE_K (k) */\n+ [0x2e] = Q_KEY_CODE_L, /* xorgevdev:46 -> linux:38 (KEY_L) -> qcode:Q_KEY_CODE_L (l) */\n+ [0x2f] = Q_KEY_CODE_SEMICOLON, /* xorgevdev:47 -> linux:39 (KEY_SEMICOLON) -> qcode:Q_KEY_CODE_SEMICOLON (semicolon) */\n+ [0x30] = Q_KEY_CODE_APOSTROPHE, /* xorgevdev:48 -> linux:40 (KEY_APOSTROPHE) -> qcode:Q_KEY_CODE_APOSTROPHE (apostrophe) */\n+ [0x31] = Q_KEY_CODE_GRAVE_ACCENT, /* xorgevdev:49 -> linux:41 (KEY_GRAVE) -> qcode:Q_KEY_CODE_GRAVE_ACCENT (grave_accent) */\n+ [0x32] = Q_KEY_CODE_SHIFT, /* xorgevdev:50 -> linux:42 (KEY_LEFTSHIFT) -> qcode:Q_KEY_CODE_SHIFT (shift) */\n+ [0x33] = Q_KEY_CODE_BACKSLASH, /* xorgevdev:51 -> linux:43 (KEY_BACKSLASH) -> qcode:Q_KEY_CODE_BACKSLASH (backslash) */\n+ [0x34] = Q_KEY_CODE_Z, /* xorgevdev:52 -> linux:44 (KEY_Z) -> qcode:Q_KEY_CODE_Z (z) */\n+ [0x35] = Q_KEY_CODE_X, /* xorgevdev:53 -> linux:45 (KEY_X) -> qcode:Q_KEY_CODE_X (x) */\n+ [0x36] = Q_KEY_CODE_C, /* xorgevdev:54 -> linux:46 (KEY_C) -> qcode:Q_KEY_CODE_C (c) */\n+ [0x37] = Q_KEY_CODE_V, /* xorgevdev:55 -> linux:47 (KEY_V) -> qcode:Q_KEY_CODE_V (v) */\n+ [0x38] = Q_KEY_CODE_B, /* xorgevdev:56 -> linux:48 (KEY_B) -> qcode:Q_KEY_CODE_B (b) */\n+ [0x39] = Q_KEY_CODE_N, /* xorgevdev:57 -> linux:49 (KEY_N) -> qcode:Q_KEY_CODE_N (n) */\n+ [0x3a] = Q_KEY_CODE_M, /* xorgevdev:58 -> linux:50 (KEY_M) -> qcode:Q_KEY_CODE_M (m) */\n+ [0x3b] = Q_KEY_CODE_COMMA, /* xorgevdev:59 -> linux:51 (KEY_COMMA) -> qcode:Q_KEY_CODE_COMMA (comma) */\n+ [0x3c] = Q_KEY_CODE_DOT, /* xorgevdev:60 -> linux:52 (KEY_DOT) -> qcode:Q_KEY_CODE_DOT (dot) */\n+ [0x3d] = Q_KEY_CODE_SLASH, /* xorgevdev:61 -> linux:53 (KEY_SLASH) -> qcode:Q_KEY_CODE_SLASH (slash) */\n+ [0x3e] = Q_KEY_CODE_SHIFT_R, /* xorgevdev:62 -> linux:54 (KEY_RIGHTSHIFT) -> qcode:Q_KEY_CODE_SHIFT_R (shift_r) */\n+ [0x3f] = Q_KEY_CODE_KP_MULTIPLY, /* xorgevdev:63 -> linux:55 (KEY_KPASTERISK) -> qcode:Q_KEY_CODE_KP_MULTIPLY (kp_multiply) */\n+ [0x40] = Q_KEY_CODE_ALT, /* xorgevdev:64 -> linux:56 (KEY_LEFTALT) -> qcode:Q_KEY_CODE_ALT (alt) */\n+ [0x41] = Q_KEY_CODE_SPC, /* xorgevdev:65 -> linux:57 (KEY_SPACE) -> qcode:Q_KEY_CODE_SPC (spc) */\n+ [0x42] = Q_KEY_CODE_CAPS_LOCK, /* xorgevdev:66 -> linux:58 (KEY_CAPSLOCK) -> qcode:Q_KEY_CODE_CAPS_LOCK (caps_lock) */\n+ [0x43] = Q_KEY_CODE_F1, /* xorgevdev:67 -> linux:59 (KEY_F1) -> qcode:Q_KEY_CODE_F1 (f1) */\n+ [0x44] = Q_KEY_CODE_F2, /* xorgevdev:68 -> linux:60 (KEY_F2) -> qcode:Q_KEY_CODE_F2 (f2) */\n+ [0x45] = Q_KEY_CODE_F3, /* xorgevdev:69 -> linux:61 (KEY_F3) -> qcode:Q_KEY_CODE_F3 (f3) */\n+ [0x46] = Q_KEY_CODE_F4, /* xorgevdev:70 -> linux:62 (KEY_F4) -> qcode:Q_KEY_CODE_F4 (f4) */\n+ [0x47] = Q_KEY_CODE_F5, /* xorgevdev:71 -> linux:63 (KEY_F5) -> qcode:Q_KEY_CODE_F5 (f5) */\n+ [0x48] = Q_KEY_CODE_F6, /* xorgevdev:72 -> linux:64 (KEY_F6) -> qcode:Q_KEY_CODE_F6 (f6) */\n+ [0x49] = Q_KEY_CODE_F7, /* xorgevdev:73 -> linux:65 (KEY_F7) -> qcode:Q_KEY_CODE_F7 (f7) */\n+ [0x4a] = Q_KEY_CODE_F8, /* xorgevdev:74 -> linux:66 (KEY_F8) -> qcode:Q_KEY_CODE_F8 (f8) */\n+ [0x4b] = Q_KEY_CODE_F9, /* xorgevdev:75 -> linux:67 (KEY_F9) -> qcode:Q_KEY_CODE_F9 (f9) */\n+ [0x4c] = Q_KEY_CODE_F10, /* xorgevdev:76 -> linux:68 (KEY_F10) -> qcode:Q_KEY_CODE_F10 (f10) */\n+ [0x4d] = Q_KEY_CODE_NUM_LOCK, /* xorgevdev:77 -> linux:69 (KEY_NUMLOCK) -> qcode:Q_KEY_CODE_NUM_LOCK (num_lock) */\n+ [0x4e] = Q_KEY_CODE_SCROLL_LOCK, /* xorgevdev:78 -> linux:70 (KEY_SCROLLLOCK) -> qcode:Q_KEY_CODE_SCROLL_LOCK (scroll_lock) */\n+ [0x4f] = Q_KEY_CODE_KP_7, /* xorgevdev:79 -> linux:71 (KEY_KP7) -> qcode:Q_KEY_CODE_KP_7 (kp_7) */\n+ [0x50] = Q_KEY_CODE_KP_8, /* xorgevdev:80 -> linux:72 (KEY_KP8) -> qcode:Q_KEY_CODE_KP_8 (kp_8) */\n+ [0x51] = Q_KEY_CODE_KP_9, /* xorgevdev:81 -> linux:73 (KEY_KP9) -> qcode:Q_KEY_CODE_KP_9 (kp_9) */\n+ [0x52] = Q_KEY_CODE_KP_SUBTRACT, /* xorgevdev:82 -> linux:74 (KEY_KPMINUS) -> qcode:Q_KEY_CODE_KP_SUBTRACT (kp_subtract) */\n+ [0x53] = Q_KEY_CODE_KP_4, /* xorgevdev:83 -> linux:75 (KEY_KP4) -> qcode:Q_KEY_CODE_KP_4 (kp_4) */\n+ [0x54] = Q_KEY_CODE_KP_5, /* xorgevdev:84 -> linux:76 (KEY_KP5) -> qcode:Q_KEY_CODE_KP_5 (kp_5) */\n+ [0x55] = Q_KEY_CODE_KP_6, /* xorgevdev:85 -> linux:77 (KEY_KP6) -> qcode:Q_KEY_CODE_KP_6 (kp_6) */\n+ [0x56] = Q_KEY_CODE_KP_ADD, /* xorgevdev:86 -> linux:78 (KEY_KPPLUS) -> qcode:Q_KEY_CODE_KP_ADD (kp_add) */\n+ [0x57] = Q_KEY_CODE_KP_1, /* xorgevdev:87 -> linux:79 (KEY_KP1) -> qcode:Q_KEY_CODE_KP_1 (kp_1) */\n+ [0x58] = Q_KEY_CODE_KP_2, /* xorgevdev:88 -> linux:80 (KEY_KP2) -> qcode:Q_KEY_CODE_KP_2 (kp_2) */\n+ [0x59] = Q_KEY_CODE_KP_3, /* xorgevdev:89 -> linux:81 (KEY_KP3) -> qcode:Q_KEY_CODE_KP_3 (kp_3) */\n+ [0x5a] = Q_KEY_CODE_KP_0, /* xorgevdev:90 -> linux:82 (KEY_KP0) -> qcode:Q_KEY_CODE_KP_0 (kp_0) */\n+ [0x5b] = Q_KEY_CODE_KP_DECIMAL, /* xorgevdev:91 -> linux:83 (KEY_KPDOT) -> qcode:Q_KEY_CODE_KP_DECIMAL (kp_decimal) */\n+ [0x5c] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:92 -> linux:84 (unnamed) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x5d] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:93 -> linux:85 (KEY_ZENKAKUHANKAKU) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x5e] = Q_KEY_CODE_LESS, /* xorgevdev:94 -> linux:86 (KEY_102ND) -> qcode:Q_KEY_CODE_LESS (less) */\n+ [0x5f] = Q_KEY_CODE_F11, /* xorgevdev:95 -> linux:87 (KEY_F11) -> qcode:Q_KEY_CODE_F11 (f11) */\n+ [0x60] = Q_KEY_CODE_F12, /* xorgevdev:96 -> linux:88 (KEY_F12) -> qcode:Q_KEY_CODE_F12 (f12) */\n+ [0x61] = Q_KEY_CODE_RO, /* xorgevdev:97 -> linux:89 (KEY_RO) -> qcode:Q_KEY_CODE_RO (ro) */\n+ [0x62] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:98 -> linux:90 (KEY_KATAKANA) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x63] = Q_KEY_CODE_HIRAGANA, /* xorgevdev:99 -> linux:91 (KEY_HIRAGANA) -> qcode:Q_KEY_CODE_HIRAGANA (hiragana) */\n+ [0x64] = Q_KEY_CODE_HENKAN, /* xorgevdev:100 -> linux:92 (KEY_HENKAN) -> qcode:Q_KEY_CODE_HENKAN (henkan) */\n+ [0x65] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:101 -> linux:93 (KEY_KATAKANAHIRAGANA) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x66] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:102 -> linux:94 (KEY_MUHENKAN) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x67] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:103 -> linux:95 (KEY_KPJPCOMMA) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x68] = Q_KEY_CODE_KP_ENTER, /* xorgevdev:104 -> linux:96 (KEY_KPENTER) -> qcode:Q_KEY_CODE_KP_ENTER (kp_enter) */\n+ [0x69] = Q_KEY_CODE_CTRL_R, /* xorgevdev:105 -> linux:97 (KEY_RIGHTCTRL) -> qcode:Q_KEY_CODE_CTRL_R (ctrl_r) */\n+ [0x6a] = Q_KEY_CODE_KP_DIVIDE, /* xorgevdev:106 -> linux:98 (KEY_KPSLASH) -> qcode:Q_KEY_CODE_KP_DIVIDE (kp_divide) */\n+ [0x6b] = Q_KEY_CODE_SYSRQ, /* xorgevdev:107 -> linux:99 (KEY_SYSRQ) -> qcode:Q_KEY_CODE_SYSRQ (sysrq) */\n+ [0x6c] = Q_KEY_CODE_ALT_R, /* xorgevdev:108 -> linux:100 (KEY_RIGHTALT) -> qcode:Q_KEY_CODE_ALT_R (alt_r) */\n+ [0x6d] = Q_KEY_CODE_LF, /* xorgevdev:109 -> linux:101 (KEY_LINEFEED) -> qcode:Q_KEY_CODE_LF (lf) */\n+ [0x6e] = Q_KEY_CODE_HOME, /* xorgevdev:110 -> linux:102 (KEY_HOME) -> qcode:Q_KEY_CODE_HOME (home) */\n+ [0x6f] = Q_KEY_CODE_UP, /* xorgevdev:111 -> linux:103 (KEY_UP) -> qcode:Q_KEY_CODE_UP (up) */\n+ [0x70] = Q_KEY_CODE_PGUP, /* xorgevdev:112 -> linux:104 (KEY_PAGEUP) -> qcode:Q_KEY_CODE_PGUP (pgup) */\n+ [0x71] = Q_KEY_CODE_LEFT, /* xorgevdev:113 -> linux:105 (KEY_LEFT) -> qcode:Q_KEY_CODE_LEFT (left) */\n+ [0x72] = Q_KEY_CODE_RIGHT, /* xorgevdev:114 -> linux:106 (KEY_RIGHT) -> qcode:Q_KEY_CODE_RIGHT (right) */\n+ [0x73] = Q_KEY_CODE_END, /* xorgevdev:115 -> linux:107 (KEY_END) -> qcode:Q_KEY_CODE_END (end) */\n+ [0x74] = Q_KEY_CODE_DOWN, /* xorgevdev:116 -> linux:108 (KEY_DOWN) -> qcode:Q_KEY_CODE_DOWN (down) */\n+ [0x75] = Q_KEY_CODE_PGDN, /* xorgevdev:117 -> linux:109 (KEY_PAGEDOWN) -> qcode:Q_KEY_CODE_PGDN (pgdn) */\n+ [0x76] = Q_KEY_CODE_INSERT, /* xorgevdev:118 -> linux:110 (KEY_INSERT) -> qcode:Q_KEY_CODE_INSERT (insert) */\n+ [0x77] = Q_KEY_CODE_DELETE, /* xorgevdev:119 -> linux:111 (KEY_DELETE) -> qcode:Q_KEY_CODE_DELETE (delete) */\n+ [0x78] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:120 -> linux:112 (KEY_MACRO) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x79] = Q_KEY_CODE_AUDIOMUTE, /* xorgevdev:121 -> linux:113 (KEY_MUTE) -> qcode:Q_KEY_CODE_AUDIOMUTE (audiomute) */\n+ [0x7a] = Q_KEY_CODE_VOLUMEDOWN, /* xorgevdev:122 -> linux:114 (KEY_VOLUMEDOWN) -> qcode:Q_KEY_CODE_VOLUMEDOWN (volumedown) */\n+ [0x7b] = Q_KEY_CODE_VOLUMEUP, /* xorgevdev:123 -> linux:115 (KEY_VOLUMEUP) -> qcode:Q_KEY_CODE_VOLUMEUP (volumeup) */\n+ [0x7c] = Q_KEY_CODE_POWER, /* xorgevdev:124 -> linux:116 (KEY_POWER) -> qcode:Q_KEY_CODE_POWER (power) */\n+ [0x7d] = Q_KEY_CODE_KP_EQUALS, /* xorgevdev:125 -> linux:117 (KEY_KPEQUAL) -> qcode:Q_KEY_CODE_KP_EQUALS (kp_equals) */\n+ [0x7e] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:126 -> linux:118 (KEY_KPPLUSMINUS) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x7f] = Q_KEY_CODE_PAUSE, /* xorgevdev:127 -> linux:119 (KEY_PAUSE) -> qcode:Q_KEY_CODE_PAUSE (pause) */\n+ [0x80] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:128 -> linux:120 (KEY_SCALE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x81] = Q_KEY_CODE_KP_COMMA, /* xorgevdev:129 -> linux:121 (KEY_KPCOMMA) -> qcode:Q_KEY_CODE_KP_COMMA (kp_comma) */\n+ [0x82] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:130 -> linux:122 (KEY_HANGEUL) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x83] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:131 -> linux:123 (KEY_HANJA) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x84] = Q_KEY_CODE_YEN, /* xorgevdev:132 -> linux:124 (KEY_YEN) -> qcode:Q_KEY_CODE_YEN (yen) */\n+ [0x85] = Q_KEY_CODE_META_L, /* xorgevdev:133 -> linux:125 (KEY_LEFTMETA) -> qcode:Q_KEY_CODE_META_L (meta_l) */\n+ [0x86] = Q_KEY_CODE_META_R, /* xorgevdev:134 -> linux:126 (KEY_RIGHTMETA) -> qcode:Q_KEY_CODE_META_R (meta_r) */\n+ [0x87] = Q_KEY_CODE_COMPOSE, /* xorgevdev:135 -> linux:127 (KEY_COMPOSE) -> qcode:Q_KEY_CODE_COMPOSE (compose) */\n+ [0x88] = Q_KEY_CODE_STOP, /* xorgevdev:136 -> linux:128 (KEY_STOP) -> qcode:Q_KEY_CODE_STOP (stop) */\n+ [0x89] = Q_KEY_CODE_AGAIN, /* xorgevdev:137 -> linux:129 (KEY_AGAIN) -> qcode:Q_KEY_CODE_AGAIN (again) */\n+ [0x8a] = Q_KEY_CODE_PROPS, /* xorgevdev:138 -> linux:130 (KEY_PROPS) -> qcode:Q_KEY_CODE_PROPS (props) */\n+ [0x8b] = Q_KEY_CODE_UNDO, /* xorgevdev:139 -> linux:131 (KEY_UNDO) -> qcode:Q_KEY_CODE_UNDO (undo) */\n+ [0x8c] = Q_KEY_CODE_FRONT, /* xorgevdev:140 -> linux:132 (KEY_FRONT) -> qcode:Q_KEY_CODE_FRONT (front) */\n+ [0x8d] = Q_KEY_CODE_COPY, /* xorgevdev:141 -> linux:133 (KEY_COPY) -> qcode:Q_KEY_CODE_COPY (copy) */\n+ [0x8e] = Q_KEY_CODE_OPEN, /* xorgevdev:142 -> linux:134 (KEY_OPEN) -> qcode:Q_KEY_CODE_OPEN (open) */\n+ [0x8f] = Q_KEY_CODE_PASTE, /* xorgevdev:143 -> linux:135 (KEY_PASTE) -> qcode:Q_KEY_CODE_PASTE (paste) */\n+ [0x90] = Q_KEY_CODE_FIND, /* xorgevdev:144 -> linux:136 (KEY_FIND) -> qcode:Q_KEY_CODE_FIND (find) */\n+ [0x91] = Q_KEY_CODE_CUT, /* xorgevdev:145 -> linux:137 (KEY_CUT) -> qcode:Q_KEY_CODE_CUT (cut) */\n+ [0x92] = Q_KEY_CODE_HELP, /* xorgevdev:146 -> linux:138 (KEY_HELP) -> qcode:Q_KEY_CODE_HELP (help) */\n+ [0x93] = Q_KEY_CODE_MENU, /* xorgevdev:147 -> linux:139 (KEY_MENU) -> qcode:Q_KEY_CODE_MENU (menu) */\n+ [0x94] = Q_KEY_CODE_CALCULATOR, /* xorgevdev:148 -> linux:140 (KEY_CALC) -> qcode:Q_KEY_CODE_CALCULATOR (calculator) */\n+ [0x95] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:149 -> linux:141 (KEY_SETUP) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x96] = Q_KEY_CODE_SLEEP, /* xorgevdev:150 -> linux:142 (KEY_SLEEP) -> qcode:Q_KEY_CODE_SLEEP (sleep) */\n+ [0x97] = Q_KEY_CODE_WAKE, /* xorgevdev:151 -> linux:143 (KEY_WAKEUP) -> qcode:Q_KEY_CODE_WAKE (wake) */\n+ [0x98] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:152 -> linux:144 (KEY_FILE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x99] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:153 -> linux:145 (KEY_SENDFILE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x9a] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:154 -> linux:146 (KEY_DELETEFILE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x9b] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:155 -> linux:147 (KEY_XFER) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x9c] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:156 -> linux:148 (KEY_PROG1) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x9d] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:157 -> linux:149 (KEY_PROG2) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x9e] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:158 -> linux:150 (KEY_WWW) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x9f] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:159 -> linux:151 (KEY_MSDOS) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xa0] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:160 -> linux:152 (KEY_SCREENLOCK) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xa1] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:161 -> linux:153 (KEY_DIRECTION) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xa2] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:162 -> linux:154 (KEY_CYCLEWINDOWS) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xa3] = Q_KEY_CODE_MAIL, /* xorgevdev:163 -> linux:155 (KEY_MAIL) -> qcode:Q_KEY_CODE_MAIL (mail) */\n+ [0xa4] = Q_KEY_CODE_AC_BOOKMARKS, /* xorgevdev:164 -> linux:156 (KEY_BOOKMARKS) -> qcode:Q_KEY_CODE_AC_BOOKMARKS (ac_bookmarks) */\n+ [0xa5] = Q_KEY_CODE_COMPUTER, /* xorgevdev:165 -> linux:157 (KEY_COMPUTER) -> qcode:Q_KEY_CODE_COMPUTER (computer) */\n+ [0xa6] = Q_KEY_CODE_AC_BACK, /* xorgevdev:166 -> linux:158 (KEY_BACK) -> qcode:Q_KEY_CODE_AC_BACK (ac_back) */\n+ [0xa7] = Q_KEY_CODE_AC_FORWARD, /* xorgevdev:167 -> linux:159 (KEY_FORWARD) -> qcode:Q_KEY_CODE_AC_FORWARD (ac_forward) */\n+ [0xa8] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:168 -> linux:160 (KEY_CLOSECD) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xa9] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:169 -> linux:161 (KEY_EJECTCD) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xaa] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:170 -> linux:162 (KEY_EJECTCLOSECD) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xab] = Q_KEY_CODE_AUDIONEXT, /* xorgevdev:171 -> linux:163 (KEY_NEXTSONG) -> qcode:Q_KEY_CODE_AUDIONEXT (audionext) */\n+ [0xac] = Q_KEY_CODE_AUDIOPLAY, /* xorgevdev:172 -> linux:164 (KEY_PLAYPAUSE) -> qcode:Q_KEY_CODE_AUDIOPLAY (audioplay) */\n+ [0xad] = Q_KEY_CODE_AUDIOPREV, /* xorgevdev:173 -> linux:165 (KEY_PREVIOUSSONG) -> qcode:Q_KEY_CODE_AUDIOPREV (audioprev) */\n+ [0xae] = Q_KEY_CODE_AUDIOSTOP, /* xorgevdev:174 -> linux:166 (KEY_STOPCD) -> qcode:Q_KEY_CODE_AUDIOSTOP (audiostop) */\n+ [0xaf] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:175 -> linux:167 (KEY_RECORD) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xb0] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:176 -> linux:168 (KEY_REWIND) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xb1] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:177 -> linux:169 (KEY_PHONE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xb2] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:178 -> linux:170 (KEY_ISO) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xb3] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:179 -> linux:171 (KEY_CONFIG) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xb4] = Q_KEY_CODE_AC_HOME, /* xorgevdev:180 -> linux:172 (KEY_HOMEPAGE) -> qcode:Q_KEY_CODE_AC_HOME (ac_home) */\n+ [0xb5] = Q_KEY_CODE_AC_REFRESH, /* xorgevdev:181 -> linux:173 (KEY_REFRESH) -> qcode:Q_KEY_CODE_AC_REFRESH (ac_refresh) */\n+ [0xb6] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:182 -> linux:174 (KEY_EXIT) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xb7] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:183 -> linux:175 (KEY_MOVE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xb8] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:184 -> linux:176 (KEY_EDIT) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xb9] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:185 -> linux:177 (KEY_SCROLLUP) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xba] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:186 -> linux:178 (KEY_SCROLLDOWN) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xbb] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:187 -> linux:179 (KEY_KPLEFTPAREN) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xbc] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:188 -> linux:180 (KEY_KPRIGHTPAREN) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xbd] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:189 -> linux:181 (KEY_NEW) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xbe] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:190 -> linux:182 (KEY_REDO) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xbf] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:191 -> linux:183 (KEY_F13) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xc0] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:192 -> linux:184 (KEY_F14) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xc1] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:193 -> linux:185 (KEY_F15) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xc2] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:194 -> linux:186 (KEY_F16) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xc3] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:195 -> linux:187 (KEY_F17) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xc4] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:196 -> linux:188 (KEY_F18) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xc5] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:197 -> linux:189 (KEY_F19) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xc6] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:198 -> linux:190 (KEY_F20) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xc7] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:199 -> linux:191 (KEY_F21) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xc8] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:200 -> linux:192 (KEY_F22) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xc9] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:201 -> linux:193 (KEY_F23) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xca] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:202 -> linux:194 (KEY_F24) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xcb] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:203 -> linux:195 (unnamed) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xcc] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:204 -> linux:196 (unnamed) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xcd] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:205 -> linux:197 (unnamed) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xce] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:206 -> linux:198 (unnamed) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xcf] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:207 -> linux:199 (unnamed) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xd0] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:208 -> linux:200 (KEY_PLAYCD) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xd1] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:209 -> linux:201 (KEY_PAUSECD) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xd2] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:210 -> linux:202 (KEY_PROG3) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xd3] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:211 -> linux:203 (KEY_PROG4) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xd4] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:212 -> linux:204 (KEY_DASHBOARD) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xd5] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:213 -> linux:205 (KEY_SUSPEND) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xd6] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:214 -> linux:206 (KEY_CLOSE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xd7] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:215 -> linux:207 (KEY_PLAY) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xd8] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:216 -> linux:208 (KEY_FASTFORWARD) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xd9] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:217 -> linux:209 (KEY_BASSBOOST) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xda] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:218 -> linux:210 (KEY_PRINT) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xdb] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:219 -> linux:211 (KEY_HP) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xdc] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:220 -> linux:212 (KEY_CAMERA) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xdd] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:221 -> linux:213 (KEY_SOUND) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xde] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:222 -> linux:214 (KEY_QUESTION) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xdf] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:223 -> linux:215 (KEY_EMAIL) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe0] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:224 -> linux:216 (KEY_CHAT) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe1] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:225 -> linux:217 (KEY_SEARCH) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe2] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:226 -> linux:218 (KEY_CONNECT) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe3] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:227 -> linux:219 (KEY_FINANCE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe4] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:228 -> linux:220 (KEY_SPORT) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe5] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:229 -> linux:221 (KEY_SHOP) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe6] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:230 -> linux:222 (KEY_ALTERASE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe7] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:231 -> linux:223 (KEY_CANCEL) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe8] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:232 -> linux:224 (KEY_BRIGHTNESSDOWN) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xe9] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:233 -> linux:225 (KEY_BRIGHTNESSUP) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xea] = Q_KEY_CODE_MEDIASELECT, /* xorgevdev:234 -> linux:226 (KEY_MEDIA) -> qcode:Q_KEY_CODE_MEDIASELECT (mediaselect) */\n+ [0xeb] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:235 -> linux:227 (KEY_SWITCHVIDEOMODE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xec] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:236 -> linux:228 (KEY_KBDILLUMTOGGLE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xed] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:237 -> linux:229 (KEY_KBDILLUMDOWN) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xee] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:238 -> linux:230 (KEY_KBDILLUMUP) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xef] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:239 -> linux:231 (KEY_SEND) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xf0] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:240 -> linux:232 (KEY_REPLY) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xf1] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:241 -> linux:233 (KEY_FORWARDMAIL) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xf2] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:242 -> linux:234 (KEY_SAVE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xf3] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:243 -> linux:235 (KEY_DOCUMENTS) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xf4] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:244 -> linux:236 (KEY_BATTERY) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xf5] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:245 -> linux:237 (KEY_BLUETOOTH) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xf6] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:246 -> linux:238 (KEY_WLAN) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xf7] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:247 -> linux:239 (KEY_UWB) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xf8] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:248 -> linux:240 (KEY_UNKNOWN) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xf9] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:249 -> linux:241 (KEY_VIDEO_NEXT) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xfa] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:250 -> linux:242 (KEY_VIDEO_PREV) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xfb] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:251 -> linux:243 (KEY_BRIGHTNESS_CYCLE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xfc] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:252 -> linux:244 (KEY_BRIGHTNESS_ZERO) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xfd] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:253 -> linux:245 (KEY_DISPLAY_OFF) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xfe] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:254 -> linux:246 (KEY_WIMAX) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0xff] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:255 -> linux:247 (unnamed) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x100] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:256 -> linux:248 (unnamed) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x101] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:257 -> linux:249 (unnamed) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x102] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:258 -> linux:250 (unnamed) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x103] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:259 -> linux:251 (unnamed) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x104] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:260 -> linux:252 (unnamed) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x105] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:261 -> linux:253 (unnamed) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x106] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:262 -> linux:254 (unnamed) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x107] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:263 -> linux:255 (unnamed) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x108] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:264 -> linux:256 (BTN_0) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x109] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:265 -> linux:257 (BTN_1) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x10a] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:266 -> linux:258 (BTN_2) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x10b] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:267 -> linux:259 (BTN_3) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x10c] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:268 -> linux:260 (BTN_4) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x10d] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:269 -> linux:261 (BTN_5) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x10e] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:270 -> linux:262 (BTN_6) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x10f] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:271 -> linux:263 (BTN_7) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x110] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:272 -> linux:264 (BTN_8) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x111] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:273 -> linux:265 (BTN_9) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x118] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:280 -> linux:272 (BTN_LEFT) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x119] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:281 -> linux:273 (BTN_RIGHT) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x11a] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:282 -> linux:274 (BTN_MIDDLE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x11b] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:283 -> linux:275 (BTN_SIDE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x11c] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:284 -> linux:276 (BTN_EXTRA) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x11d] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:285 -> linux:277 (BTN_FORWARD) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x11e] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:286 -> linux:278 (BTN_BACK) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x11f] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:287 -> linux:279 (BTN_TASK) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x128] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:296 -> linux:288 (BTN_TRIGGER) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x129] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:297 -> linux:289 (BTN_THUMB) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x12a] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:298 -> linux:290 (BTN_THUMB2) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x12b] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:299 -> linux:291 (BTN_TOP) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x12c] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:300 -> linux:292 (BTN_TOP2) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x12d] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:301 -> linux:293 (BTN_PINKIE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x12e] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:302 -> linux:294 (BTN_BASE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x12f] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:303 -> linux:295 (BTN_BASE2) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x130] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:304 -> linux:296 (BTN_BASE3) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x131] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:305 -> linux:297 (BTN_BASE4) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x132] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:306 -> linux:298 (BTN_BASE5) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x133] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:307 -> linux:299 (BTN_BASE6) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x137] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:311 -> linux:303 (BTN_DEAD) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x138] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:312 -> linux:304 (BTN_A) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x139] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:313 -> linux:305 (BTN_B) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x13a] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:314 -> linux:306 (BTN_C) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x13b] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:315 -> linux:307 (BTN_X) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x13c] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:316 -> linux:308 (BTN_Y) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x13d] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:317 -> linux:309 (BTN_Z) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x13e] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:318 -> linux:310 (BTN_TL) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x13f] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:319 -> linux:311 (BTN_TR) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x140] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:320 -> linux:312 (BTN_TL2) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x141] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:321 -> linux:313 (BTN_TR2) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x142] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:322 -> linux:314 (BTN_SELECT) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x143] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:323 -> linux:315 (BTN_START) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x144] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:324 -> linux:316 (BTN_MODE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x145] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:325 -> linux:317 (BTN_THUMBL) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x146] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:326 -> linux:318 (BTN_THUMBR) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x148] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:328 -> linux:320 (BTN_TOOL_PEN) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x149] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:329 -> linux:321 (BTN_TOOL_RUBBER) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x14a] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:330 -> linux:322 (BTN_TOOL_BRUSH) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x14b] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:331 -> linux:323 (BTN_TOOL_PENCIL) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x14c] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:332 -> linux:324 (BTN_TOOL_AIRBRUSH) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x14d] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:333 -> linux:325 (BTN_TOOL_FINGER) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x14e] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:334 -> linux:326 (BTN_TOOL_MOUSE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x14f] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:335 -> linux:327 (BTN_TOOL_LENS) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x152] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:338 -> linux:330 (BTN_TOUCH) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x153] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:339 -> linux:331 (BTN_STYLUS) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x154] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:340 -> linux:332 (BTN_STYLUS2) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x155] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:341 -> linux:333 (BTN_TOOL_DOUBLETAP) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x156] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:342 -> linux:334 (BTN_TOOL_TRIPLETAP) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x157] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:343 -> linux:335 (BTN_TOOL_QUADTAP) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x158] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:344 -> linux:336 (BTN_GEAR_DOWN) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x159] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:345 -> linux:337 (BTN_GEAR_UP) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x168] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:360 -> linux:352 (KEY_OK) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x169] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:361 -> linux:353 (KEY_SELECT) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x16a] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:362 -> linux:354 (KEY_GOTO) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x16b] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:363 -> linux:355 (KEY_CLEAR) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x16c] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:364 -> linux:356 (KEY_POWER2) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x16d] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:365 -> linux:357 (KEY_OPTION) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x16e] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:366 -> linux:358 (KEY_INFO) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x16f] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:367 -> linux:359 (KEY_TIME) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x170] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:368 -> linux:360 (KEY_VENDOR) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x171] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:369 -> linux:361 (KEY_ARCHIVE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x172] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:370 -> linux:362 (KEY_PROGRAM) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x173] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:371 -> linux:363 (KEY_CHANNEL) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x174] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:372 -> linux:364 (KEY_FAVORITES) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x175] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:373 -> linux:365 (KEY_EPG) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x176] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:374 -> linux:366 (KEY_PVR) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x177] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:375 -> linux:367 (KEY_MHP) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x178] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:376 -> linux:368 (KEY_LANGUAGE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x179] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:377 -> linux:369 (KEY_TITLE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x17a] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:378 -> linux:370 (KEY_SUBTITLE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x17b] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:379 -> linux:371 (KEY_ANGLE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x17c] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:380 -> linux:372 (KEY_ZOOM) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x17d] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:381 -> linux:373 (KEY_MODE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x17e] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:382 -> linux:374 (KEY_KEYBOARD) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x17f] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:383 -> linux:375 (KEY_SCREEN) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x180] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:384 -> linux:376 (KEY_PC) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x181] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:385 -> linux:377 (KEY_TV) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x182] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:386 -> linux:378 (KEY_TV2) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x183] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:387 -> linux:379 (KEY_VCR) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x184] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:388 -> linux:380 (KEY_VCR2) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x185] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:389 -> linux:381 (KEY_SAT) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x186] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:390 -> linux:382 (KEY_SAT2) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x187] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:391 -> linux:383 (KEY_CD) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x188] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:392 -> linux:384 (KEY_TAPE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x189] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:393 -> linux:385 (KEY_RADIO) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x18a] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:394 -> linux:386 (KEY_TUNER) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x18b] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:395 -> linux:387 (KEY_PLAYER) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x18c] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:396 -> linux:388 (KEY_TEXT) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x18d] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:397 -> linux:389 (KEY_DVD) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x18e] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:398 -> linux:390 (KEY_AUX) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x18f] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:399 -> linux:391 (KEY_MP3) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x190] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:400 -> linux:392 (KEY_AUDIO) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x191] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:401 -> linux:393 (KEY_VIDEO) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x192] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:402 -> linux:394 (KEY_DIRECTORY) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x193] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:403 -> linux:395 (KEY_LIST) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x194] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:404 -> linux:396 (KEY_MEMO) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x195] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:405 -> linux:397 (KEY_CALENDAR) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x196] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:406 -> linux:398 (KEY_RED) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x197] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:407 -> linux:399 (KEY_GREEN) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x198] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:408 -> linux:400 (KEY_YELLOW) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x199] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:409 -> linux:401 (KEY_BLUE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x19a] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:410 -> linux:402 (KEY_CHANNELUP) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x19b] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:411 -> linux:403 (KEY_CHANNELDOWN) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x19c] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:412 -> linux:404 (KEY_FIRST) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x19d] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:413 -> linux:405 (KEY_LAST) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x19e] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:414 -> linux:406 (KEY_AB) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x19f] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:415 -> linux:407 (KEY_NEXT) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1a0] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:416 -> linux:408 (KEY_RESTART) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1a1] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:417 -> linux:409 (KEY_SLOW) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1a2] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:418 -> linux:410 (KEY_SHUFFLE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1a3] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:419 -> linux:411 (KEY_BREAK) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1a4] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:420 -> linux:412 (KEY_PREVIOUS) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1a5] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:421 -> linux:413 (KEY_DIGITS) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1a6] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:422 -> linux:414 (KEY_TEEN) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1a7] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:423 -> linux:415 (KEY_TWEN) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1a8] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:424 -> linux:416 (KEY_VIDEOPHONE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1a9] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:425 -> linux:417 (KEY_GAMES) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1aa] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:426 -> linux:418 (KEY_ZOOMIN) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1ab] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:427 -> linux:419 (KEY_ZOOMOUT) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1ac] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:428 -> linux:420 (KEY_ZOOMRESET) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1ad] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:429 -> linux:421 (KEY_WORDPROCESSOR) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1ae] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:430 -> linux:422 (KEY_EDITOR) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1af] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:431 -> linux:423 (KEY_SPREADSHEET) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1b0] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:432 -> linux:424 (KEY_GRAPHICSEDITOR) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1b1] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:433 -> linux:425 (KEY_PRESENTATION) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1b2] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:434 -> linux:426 (KEY_DATABASE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1b3] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:435 -> linux:427 (KEY_NEWS) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1b4] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:436 -> linux:428 (KEY_VOICEMAIL) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1b5] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:437 -> linux:429 (KEY_ADDRESSBOOK) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1b6] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:438 -> linux:430 (KEY_MESSENGER) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1b7] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:439 -> linux:431 (KEY_DISPLAYTOGGLE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1b8] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:440 -> linux:432 (KEY_SPELLCHECK) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1b9] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:441 -> linux:433 (KEY_LOGOFF) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1ba] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:442 -> linux:434 (KEY_DOLLAR) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1bb] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:443 -> linux:435 (KEY_EURO) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1bc] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:444 -> linux:436 (KEY_FRAMEBACK) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1bd] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:445 -> linux:437 (KEY_FRAMEFORWARD) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1be] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:446 -> linux:438 (KEY_CONTEXT_MENU) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1bf] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:447 -> linux:439 (KEY_MEDIA_REPEAT) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1c8] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:456 -> linux:448 (KEY_DEL_EOL) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1c9] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:457 -> linux:449 (KEY_DEL_EOS) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1ca] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:458 -> linux:450 (KEY_INS_LINE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1cb] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:459 -> linux:451 (KEY_DEL_LINE) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1d8] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:472 -> linux:464 (KEY_FN) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1d9] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:473 -> linux:465 (KEY_FN_ESC) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1da] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:474 -> linux:466 (KEY_FN_F1) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1db] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:475 -> linux:467 (KEY_FN_F2) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1dc] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:476 -> linux:468 (KEY_FN_F3) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1dd] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:477 -> linux:469 (KEY_FN_F4) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1de] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:478 -> linux:470 (KEY_FN_F5) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1df] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:479 -> linux:471 (KEY_FN_F6) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1e0] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:480 -> linux:472 (KEY_FN_F7) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1e1] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:481 -> linux:473 (KEY_FN_F8) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1e2] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:482 -> linux:474 (KEY_FN_F9) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1e3] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:483 -> linux:475 (KEY_FN_F10) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1e4] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:484 -> linux:476 (KEY_FN_F11) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1e5] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:485 -> linux:477 (KEY_FN_F12) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1e6] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:486 -> linux:478 (KEY_FN_1) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1e7] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:487 -> linux:479 (KEY_FN_2) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1e8] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:488 -> linux:480 (KEY_FN_D) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1e9] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:489 -> linux:481 (KEY_FN_E) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1ea] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:490 -> linux:482 (KEY_FN_F) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1eb] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:491 -> linux:483 (KEY_FN_S) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1ec] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:492 -> linux:484 (KEY_FN_B) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1f9] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:505 -> linux:497 (KEY_BRL_DOT1) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1fa] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:506 -> linux:498 (KEY_BRL_DOT2) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1fb] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:507 -> linux:499 (KEY_BRL_DOT3) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1fc] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:508 -> linux:500 (KEY_BRL_DOT4) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1fd] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:509 -> linux:501 (KEY_BRL_DOT5) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1fe] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:510 -> linux:502 (KEY_BRL_DOT6) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x1ff] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:511 -> linux:503 (KEY_BRL_DOT7) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x200] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:512 -> linux:504 (KEY_BRL_DOT8) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x201] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:513 -> linux:505 (KEY_BRL_DOT9) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x202] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:514 -> linux:506 (KEY_BRL_DOT10) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x208] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:520 -> linux:512 (KEY_NUMERIC_0) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x209] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:521 -> linux:513 (KEY_NUMERIC_1) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x20a] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:522 -> linux:514 (KEY_NUMERIC_2) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x20b] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:523 -> linux:515 (KEY_NUMERIC_3) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x20c] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:524 -> linux:516 (KEY_NUMERIC_4) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x20d] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:525 -> linux:517 (KEY_NUMERIC_5) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x20e] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:526 -> linux:518 (KEY_NUMERIC_6) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x20f] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:527 -> linux:519 (KEY_NUMERIC_7) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x210] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:528 -> linux:520 (KEY_NUMERIC_8) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x211] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:529 -> linux:521 (KEY_NUMERIC_9) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x212] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:530 -> linux:522 (KEY_NUMERIC_STAR) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x213] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:531 -> linux:523 (KEY_NUMERIC_POUND) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x214] = Q_KEY_CODE_UNMAPPED, /* xorgevdev:532 -> linux:524 (KEY_RFKILL) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+};\n+const guint qemu_input_map_xorgevdev_to_qcode_len = sizeof(qemu_input_map_xorgevdev_to_qcode)/sizeof(qemu_input_map_xorgevdev_to_qcode[0]);\ndiff --git a/ui/input-keymap-xorgkbd-to-qcode.c b/ui/input-keymap-xorgkbd-to-qcode.c\nnew file mode 100644\nindex 0000000000..c46097a0e8\n--- /dev/null\n+++ b/ui/input-keymap-xorgkbd-to-qcode.c\n@@ -0,0 +1,122 @@\n+/*\n+ * This file is auto-generated from keymaps.csv on 2017-08-31 11:08\n+ * Database checksum sha256(f8aeff0c3430077a350e3d7ba2b335b381bd929ac4b193413730a402ff3f0097)\n+ * To re-generate, run:\n+ * keymap-gen --lang=glib2 --varname=qemu_input_map_xorgkbd_to_qcode code-map keymaps.csv xorgkbd qcode\n+*/\n+const guint16 qemu_input_map_xorgkbd_to_qcode[209] = {\n+ [0x9] = Q_KEY_CODE_ESC, /* xorgkbd:9 -> linux:1 (KEY_ESC) -> qcode:Q_KEY_CODE_ESC (esc) */\n+ [0xa] = Q_KEY_CODE_1, /* xorgkbd:10 -> linux:2 (KEY_1) -> qcode:Q_KEY_CODE_1 (1) */\n+ [0xb] = Q_KEY_CODE_2, /* xorgkbd:11 -> linux:3 (KEY_2) -> qcode:Q_KEY_CODE_2 (2) */\n+ [0xc] = Q_KEY_CODE_3, /* xorgkbd:12 -> linux:4 (KEY_3) -> qcode:Q_KEY_CODE_3 (3) */\n+ [0xd] = Q_KEY_CODE_4, /* xorgkbd:13 -> linux:5 (KEY_4) -> qcode:Q_KEY_CODE_4 (4) */\n+ [0xe] = Q_KEY_CODE_5, /* xorgkbd:14 -> linux:6 (KEY_5) -> qcode:Q_KEY_CODE_5 (5) */\n+ [0xf] = Q_KEY_CODE_6, /* xorgkbd:15 -> linux:7 (KEY_6) -> qcode:Q_KEY_CODE_6 (6) */\n+ [0x10] = Q_KEY_CODE_7, /* xorgkbd:16 -> linux:8 (KEY_7) -> qcode:Q_KEY_CODE_7 (7) */\n+ [0x11] = Q_KEY_CODE_8, /* xorgkbd:17 -> linux:9 (KEY_8) -> qcode:Q_KEY_CODE_8 (8) */\n+ [0x12] = Q_KEY_CODE_9, /* xorgkbd:18 -> linux:10 (KEY_9) -> qcode:Q_KEY_CODE_9 (9) */\n+ [0x13] = Q_KEY_CODE_0, /* xorgkbd:19 -> linux:11 (KEY_0) -> qcode:Q_KEY_CODE_0 (0) */\n+ [0x14] = Q_KEY_CODE_MINUS, /* xorgkbd:20 -> linux:12 (KEY_MINUS) -> qcode:Q_KEY_CODE_MINUS (minus) */\n+ [0x15] = Q_KEY_CODE_EQUAL, /* xorgkbd:21 -> linux:13 (KEY_EQUAL) -> qcode:Q_KEY_CODE_EQUAL (equal) */\n+ [0x16] = Q_KEY_CODE_BACKSPACE, /* xorgkbd:22 -> linux:14 (KEY_BACKSPACE) -> qcode:Q_KEY_CODE_BACKSPACE (backspace) */\n+ [0x17] = Q_KEY_CODE_TAB, /* xorgkbd:23 -> linux:15 (KEY_TAB) -> qcode:Q_KEY_CODE_TAB (tab) */\n+ [0x18] = Q_KEY_CODE_Q, /* xorgkbd:24 -> linux:16 (KEY_Q) -> qcode:Q_KEY_CODE_Q (q) */\n+ [0x19] = Q_KEY_CODE_W, /* xorgkbd:25 -> linux:17 (KEY_W) -> qcode:Q_KEY_CODE_W (w) */\n+ [0x1a] = Q_KEY_CODE_E, /* xorgkbd:26 -> linux:18 (KEY_E) -> qcode:Q_KEY_CODE_E (e) */\n+ [0x1b] = Q_KEY_CODE_R, /* xorgkbd:27 -> linux:19 (KEY_R) -> qcode:Q_KEY_CODE_R (r) */\n+ [0x1c] = Q_KEY_CODE_T, /* xorgkbd:28 -> linux:20 (KEY_T) -> qcode:Q_KEY_CODE_T (t) */\n+ [0x1d] = Q_KEY_CODE_Y, /* xorgkbd:29 -> linux:21 (KEY_Y) -> qcode:Q_KEY_CODE_Y (y) */\n+ [0x1e] = Q_KEY_CODE_U, /* xorgkbd:30 -> linux:22 (KEY_U) -> qcode:Q_KEY_CODE_U (u) */\n+ [0x1f] = Q_KEY_CODE_I, /* xorgkbd:31 -> linux:23 (KEY_I) -> qcode:Q_KEY_CODE_I (i) */\n+ [0x20] = Q_KEY_CODE_O, /* xorgkbd:32 -> linux:24 (KEY_O) -> qcode:Q_KEY_CODE_O (o) */\n+ [0x21] = Q_KEY_CODE_P, /* xorgkbd:33 -> linux:25 (KEY_P) -> qcode:Q_KEY_CODE_P (p) */\n+ [0x22] = Q_KEY_CODE_BRACKET_LEFT, /* xorgkbd:34 -> linux:26 (KEY_LEFTBRACE) -> qcode:Q_KEY_CODE_BRACKET_LEFT (bracket_left) */\n+ [0x23] = Q_KEY_CODE_BRACKET_RIGHT, /* xorgkbd:35 -> linux:27 (KEY_RIGHTBRACE) -> qcode:Q_KEY_CODE_BRACKET_RIGHT (bracket_right) */\n+ [0x24] = Q_KEY_CODE_RET, /* xorgkbd:36 -> linux:28 (KEY_ENTER) -> qcode:Q_KEY_CODE_RET (ret) */\n+ [0x25] = Q_KEY_CODE_CTRL, /* xorgkbd:37 -> linux:29 (KEY_LEFTCTRL) -> qcode:Q_KEY_CODE_CTRL (ctrl) */\n+ [0x26] = Q_KEY_CODE_A, /* xorgkbd:38 -> linux:30 (KEY_A) -> qcode:Q_KEY_CODE_A (a) */\n+ [0x27] = Q_KEY_CODE_S, /* xorgkbd:39 -> linux:31 (KEY_S) -> qcode:Q_KEY_CODE_S (s) */\n+ [0x28] = Q_KEY_CODE_D, /* xorgkbd:40 -> linux:32 (KEY_D) -> qcode:Q_KEY_CODE_D (d) */\n+ [0x29] = Q_KEY_CODE_F, /* xorgkbd:41 -> linux:33 (KEY_F) -> qcode:Q_KEY_CODE_F (f) */\n+ [0x2a] = Q_KEY_CODE_G, /* xorgkbd:42 -> linux:34 (KEY_G) -> qcode:Q_KEY_CODE_G (g) */\n+ [0x2b] = Q_KEY_CODE_H, /* xorgkbd:43 -> linux:35 (KEY_H) -> qcode:Q_KEY_CODE_H (h) */\n+ [0x2c] = Q_KEY_CODE_J, /* xorgkbd:44 -> linux:36 (KEY_J) -> qcode:Q_KEY_CODE_J (j) */\n+ [0x2d] = Q_KEY_CODE_K, /* xorgkbd:45 -> linux:37 (KEY_K) -> qcode:Q_KEY_CODE_K (k) */\n+ [0x2e] = Q_KEY_CODE_L, /* xorgkbd:46 -> linux:38 (KEY_L) -> qcode:Q_KEY_CODE_L (l) */\n+ [0x2f] = Q_KEY_CODE_SEMICOLON, /* xorgkbd:47 -> linux:39 (KEY_SEMICOLON) -> qcode:Q_KEY_CODE_SEMICOLON (semicolon) */\n+ [0x30] = Q_KEY_CODE_APOSTROPHE, /* xorgkbd:48 -> linux:40 (KEY_APOSTROPHE) -> qcode:Q_KEY_CODE_APOSTROPHE (apostrophe) */\n+ [0x31] = Q_KEY_CODE_GRAVE_ACCENT, /* xorgkbd:49 -> linux:41 (KEY_GRAVE) -> qcode:Q_KEY_CODE_GRAVE_ACCENT (grave_accent) */\n+ [0x32] = Q_KEY_CODE_SHIFT, /* xorgkbd:50 -> linux:42 (KEY_LEFTSHIFT) -> qcode:Q_KEY_CODE_SHIFT (shift) */\n+ [0x33] = Q_KEY_CODE_BACKSLASH, /* xorgkbd:51 -> linux:43 (KEY_BACKSLASH) -> qcode:Q_KEY_CODE_BACKSLASH (backslash) */\n+ [0x34] = Q_KEY_CODE_Z, /* xorgkbd:52 -> linux:44 (KEY_Z) -> qcode:Q_KEY_CODE_Z (z) */\n+ [0x35] = Q_KEY_CODE_X, /* xorgkbd:53 -> linux:45 (KEY_X) -> qcode:Q_KEY_CODE_X (x) */\n+ [0x36] = Q_KEY_CODE_C, /* xorgkbd:54 -> linux:46 (KEY_C) -> qcode:Q_KEY_CODE_C (c) */\n+ [0x37] = Q_KEY_CODE_V, /* xorgkbd:55 -> linux:47 (KEY_V) -> qcode:Q_KEY_CODE_V (v) */\n+ [0x38] = Q_KEY_CODE_B, /* xorgkbd:56 -> linux:48 (KEY_B) -> qcode:Q_KEY_CODE_B (b) */\n+ [0x39] = Q_KEY_CODE_N, /* xorgkbd:57 -> linux:49 (KEY_N) -> qcode:Q_KEY_CODE_N (n) */\n+ [0x3a] = Q_KEY_CODE_M, /* xorgkbd:58 -> linux:50 (KEY_M) -> qcode:Q_KEY_CODE_M (m) */\n+ [0x3b] = Q_KEY_CODE_COMMA, /* xorgkbd:59 -> linux:51 (KEY_COMMA) -> qcode:Q_KEY_CODE_COMMA (comma) */\n+ [0x3c] = Q_KEY_CODE_DOT, /* xorgkbd:60 -> linux:52 (KEY_DOT) -> qcode:Q_KEY_CODE_DOT (dot) */\n+ [0x3d] = Q_KEY_CODE_SLASH, /* xorgkbd:61 -> linux:53 (KEY_SLASH) -> qcode:Q_KEY_CODE_SLASH (slash) */\n+ [0x3e] = Q_KEY_CODE_SHIFT_R, /* xorgkbd:62 -> linux:54 (KEY_RIGHTSHIFT) -> qcode:Q_KEY_CODE_SHIFT_R (shift_r) */\n+ [0x3f] = Q_KEY_CODE_KP_MULTIPLY, /* xorgkbd:63 -> linux:55 (KEY_KPASTERISK) -> qcode:Q_KEY_CODE_KP_MULTIPLY (kp_multiply) */\n+ [0x40] = Q_KEY_CODE_ALT, /* xorgkbd:64 -> linux:56 (KEY_LEFTALT) -> qcode:Q_KEY_CODE_ALT (alt) */\n+ [0x41] = Q_KEY_CODE_SPC, /* xorgkbd:65 -> linux:57 (KEY_SPACE) -> qcode:Q_KEY_CODE_SPC (spc) */\n+ [0x42] = Q_KEY_CODE_CAPS_LOCK, /* xorgkbd:66 -> linux:58 (KEY_CAPSLOCK) -> qcode:Q_KEY_CODE_CAPS_LOCK (caps_lock) */\n+ [0x43] = Q_KEY_CODE_F1, /* xorgkbd:67 -> linux:59 (KEY_F1) -> qcode:Q_KEY_CODE_F1 (f1) */\n+ [0x44] = Q_KEY_CODE_F2, /* xorgkbd:68 -> linux:60 (KEY_F2) -> qcode:Q_KEY_CODE_F2 (f2) */\n+ [0x45] = Q_KEY_CODE_F3, /* xorgkbd:69 -> linux:61 (KEY_F3) -> qcode:Q_KEY_CODE_F3 (f3) */\n+ [0x46] = Q_KEY_CODE_F4, /* xorgkbd:70 -> linux:62 (KEY_F4) -> qcode:Q_KEY_CODE_F4 (f4) */\n+ [0x47] = Q_KEY_CODE_F5, /* xorgkbd:71 -> linux:63 (KEY_F5) -> qcode:Q_KEY_CODE_F5 (f5) */\n+ [0x48] = Q_KEY_CODE_F6, /* xorgkbd:72 -> linux:64 (KEY_F6) -> qcode:Q_KEY_CODE_F6 (f6) */\n+ [0x49] = Q_KEY_CODE_F7, /* xorgkbd:73 -> linux:65 (KEY_F7) -> qcode:Q_KEY_CODE_F7 (f7) */\n+ [0x4a] = Q_KEY_CODE_F8, /* xorgkbd:74 -> linux:66 (KEY_F8) -> qcode:Q_KEY_CODE_F8 (f8) */\n+ [0x4b] = Q_KEY_CODE_F9, /* xorgkbd:75 -> linux:67 (KEY_F9) -> qcode:Q_KEY_CODE_F9 (f9) */\n+ [0x4c] = Q_KEY_CODE_F10, /* xorgkbd:76 -> linux:68 (KEY_F10) -> qcode:Q_KEY_CODE_F10 (f10) */\n+ [0x4d] = Q_KEY_CODE_NUM_LOCK, /* xorgkbd:77 -> linux:69 (KEY_NUMLOCK) -> qcode:Q_KEY_CODE_NUM_LOCK (num_lock) */\n+ [0x4e] = Q_KEY_CODE_SCROLL_LOCK, /* xorgkbd:78 -> linux:70 (KEY_SCROLLLOCK) -> qcode:Q_KEY_CODE_SCROLL_LOCK (scroll_lock) */\n+ [0x4f] = Q_KEY_CODE_KP_7, /* xorgkbd:79 -> linux:71 (KEY_KP7) -> qcode:Q_KEY_CODE_KP_7 (kp_7) */\n+ [0x50] = Q_KEY_CODE_KP_8, /* xorgkbd:80 -> linux:72 (KEY_KP8) -> qcode:Q_KEY_CODE_KP_8 (kp_8) */\n+ [0x51] = Q_KEY_CODE_KP_9, /* xorgkbd:81 -> linux:73 (KEY_KP9) -> qcode:Q_KEY_CODE_KP_9 (kp_9) */\n+ [0x52] = Q_KEY_CODE_KP_SUBTRACT, /* xorgkbd:82 -> linux:74 (KEY_KPMINUS) -> qcode:Q_KEY_CODE_KP_SUBTRACT (kp_subtract) */\n+ [0x53] = Q_KEY_CODE_KP_4, /* xorgkbd:83 -> linux:75 (KEY_KP4) -> qcode:Q_KEY_CODE_KP_4 (kp_4) */\n+ [0x54] = Q_KEY_CODE_KP_5, /* xorgkbd:84 -> linux:76 (KEY_KP5) -> qcode:Q_KEY_CODE_KP_5 (kp_5) */\n+ [0x55] = Q_KEY_CODE_KP_6, /* xorgkbd:85 -> linux:77 (KEY_KP6) -> qcode:Q_KEY_CODE_KP_6 (kp_6) */\n+ [0x56] = Q_KEY_CODE_KP_ADD, /* xorgkbd:86 -> linux:78 (KEY_KPPLUS) -> qcode:Q_KEY_CODE_KP_ADD (kp_add) */\n+ [0x57] = Q_KEY_CODE_KP_1, /* xorgkbd:87 -> linux:79 (KEY_KP1) -> qcode:Q_KEY_CODE_KP_1 (kp_1) */\n+ [0x58] = Q_KEY_CODE_KP_2, /* xorgkbd:88 -> linux:80 (KEY_KP2) -> qcode:Q_KEY_CODE_KP_2 (kp_2) */\n+ [0x59] = Q_KEY_CODE_KP_3, /* xorgkbd:89 -> linux:81 (KEY_KP3) -> qcode:Q_KEY_CODE_KP_3 (kp_3) */\n+ [0x5a] = Q_KEY_CODE_KP_0, /* xorgkbd:90 -> linux:82 (KEY_KP0) -> qcode:Q_KEY_CODE_KP_0 (kp_0) */\n+ [0x5b] = Q_KEY_CODE_KP_DECIMAL, /* xorgkbd:91 -> linux:83 (KEY_KPDOT) -> qcode:Q_KEY_CODE_KP_DECIMAL (kp_decimal) */\n+ [0x5e] = Q_KEY_CODE_LESS, /* xorgkbd:94 -> linux:86 (KEY_102ND) -> qcode:Q_KEY_CODE_LESS (less) */\n+ [0x5f] = Q_KEY_CODE_F11, /* xorgkbd:95 -> linux:87 (KEY_F11) -> qcode:Q_KEY_CODE_F11 (f11) */\n+ [0x60] = Q_KEY_CODE_F12, /* xorgkbd:96 -> linux:88 (KEY_F12) -> qcode:Q_KEY_CODE_F12 (f12) */\n+ [0x61] = Q_KEY_CODE_HOME, /* xorgkbd:97 -> linux:102 (KEY_HOME) -> qcode:Q_KEY_CODE_HOME (home) */\n+ [0x62] = Q_KEY_CODE_UP, /* xorgkbd:98 -> linux:103 (KEY_UP) -> qcode:Q_KEY_CODE_UP (up) */\n+ [0x63] = Q_KEY_CODE_PGUP, /* xorgkbd:99 -> linux:104 (KEY_PAGEUP) -> qcode:Q_KEY_CODE_PGUP (pgup) */\n+ [0x64] = Q_KEY_CODE_LEFT, /* xorgkbd:100 -> linux:105 (KEY_LEFT) -> qcode:Q_KEY_CODE_LEFT (left) */\n+ [0x66] = Q_KEY_CODE_RIGHT, /* xorgkbd:102 -> linux:106 (KEY_RIGHT) -> qcode:Q_KEY_CODE_RIGHT (right) */\n+ [0x67] = Q_KEY_CODE_END, /* xorgkbd:103 -> linux:107 (KEY_END) -> qcode:Q_KEY_CODE_END (end) */\n+ [0x68] = Q_KEY_CODE_DOWN, /* xorgkbd:104 -> linux:108 (KEY_DOWN) -> qcode:Q_KEY_CODE_DOWN (down) */\n+ [0x69] = Q_KEY_CODE_PGDN, /* xorgkbd:105 -> linux:109 (KEY_PAGEDOWN) -> qcode:Q_KEY_CODE_PGDN (pgdn) */\n+ [0x6a] = Q_KEY_CODE_INSERT, /* xorgkbd:106 -> linux:110 (KEY_INSERT) -> qcode:Q_KEY_CODE_INSERT (insert) */\n+ [0x6b] = Q_KEY_CODE_DELETE, /* xorgkbd:107 -> linux:111 (KEY_DELETE) -> qcode:Q_KEY_CODE_DELETE (delete) */\n+ [0x6c] = Q_KEY_CODE_KP_ENTER, /* xorgkbd:108 -> linux:96 (KEY_KPENTER) -> qcode:Q_KEY_CODE_KP_ENTER (kp_enter) */\n+ [0x6d] = Q_KEY_CODE_CTRL_R, /* xorgkbd:109 -> linux:97 (KEY_RIGHTCTRL) -> qcode:Q_KEY_CODE_CTRL_R (ctrl_r) */\n+ [0x6e] = Q_KEY_CODE_PAUSE, /* xorgkbd:110 -> linux:119 (KEY_PAUSE) -> qcode:Q_KEY_CODE_PAUSE (pause) */\n+ [0x6f] = Q_KEY_CODE_SYSRQ, /* xorgkbd:111 -> linux:99 (KEY_SYSRQ) -> qcode:Q_KEY_CODE_SYSRQ (sysrq) */\n+ [0x70] = Q_KEY_CODE_KP_DIVIDE, /* xorgkbd:112 -> linux:98 (KEY_KPSLASH) -> qcode:Q_KEY_CODE_KP_DIVIDE (kp_divide) */\n+ [0x71] = Q_KEY_CODE_ALT_R, /* xorgkbd:113 -> linux:100 (KEY_RIGHTALT) -> qcode:Q_KEY_CODE_ALT_R (alt_r) */\n+ [0x73] = Q_KEY_CODE_META_L, /* xorgkbd:115 -> linux:125 (KEY_LEFTMETA) -> qcode:Q_KEY_CODE_META_L (meta_l) */\n+ [0x74] = Q_KEY_CODE_META_R, /* xorgkbd:116 -> linux:126 (KEY_RIGHTMETA) -> qcode:Q_KEY_CODE_META_R (meta_r) */\n+ [0x75] = Q_KEY_CODE_COMPOSE, /* xorgkbd:117 -> linux:127 (KEY_COMPOSE) -> qcode:Q_KEY_CODE_COMPOSE (compose) */\n+ [0x76] = Q_KEY_CODE_UNMAPPED, /* xorgkbd:118 -> linux:183 (KEY_F13) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x77] = Q_KEY_CODE_UNMAPPED, /* xorgkbd:119 -> linux:184 (KEY_F14) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x78] = Q_KEY_CODE_UNMAPPED, /* xorgkbd:120 -> linux:185 (KEY_F15) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x79] = Q_KEY_CODE_UNMAPPED, /* xorgkbd:121 -> linux:186 (KEY_F16) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x7a] = Q_KEY_CODE_UNMAPPED, /* xorgkbd:122 -> linux:187 (KEY_F17) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x7e] = Q_KEY_CODE_KP_EQUALS, /* xorgkbd:126 -> linux:117 (KEY_KPEQUAL) -> qcode:Q_KEY_CODE_KP_EQUALS (kp_equals) */\n+ [0x85] = Q_KEY_CODE_YEN, /* xorgkbd:133 -> linux:124 (KEY_YEN) -> qcode:Q_KEY_CODE_YEN (yen) */\n+ [0xd0] = Q_KEY_CODE_UNMAPPED, /* xorgkbd:208 -> linux:93 (KEY_KATAKANAHIRAGANA) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+};\n+const guint qemu_input_map_xorgkbd_to_qcode_len = sizeof(qemu_input_map_xorgkbd_to_qcode)/sizeof(qemu_input_map_xorgkbd_to_qcode[0]);\ndiff --git a/ui/input-keymap-xorgxquartz-to-qcode.c b/ui/input-keymap-xorgxquartz-to-qcode.c\nnew file mode 100644\nindex 0000000000..5758ecd223\n--- /dev/null\n+++ b/ui/input-keymap-xorgxquartz-to-qcode.c\n@@ -0,0 +1,128 @@\n+/*\n+ * This file is auto-generated from keymaps.csv on 2017-08-31 11:08\n+ * Database checksum sha256(f8aeff0c3430077a350e3d7ba2b335b381bd929ac4b193413730a402ff3f0097)\n+ * To re-generate, run:\n+ * keymap-gen --lang=glib2 --varname=qemu_input_map_xorgxquartz_to_qcode code-map keymaps.csv xorgxquartz qcode\n+*/\n+const guint16 qemu_input_map_xorgxquartz_to_qcode[264] = {\n+ [0x8] = Q_KEY_CODE_A, /* xorgxquartz:8 -> linux:30 (KEY_A) -> qcode:Q_KEY_CODE_A (a) */\n+ [0x9] = Q_KEY_CODE_S, /* xorgxquartz:9 -> linux:31 (KEY_S) -> qcode:Q_KEY_CODE_S (s) */\n+ [0xa] = Q_KEY_CODE_D, /* xorgxquartz:10 -> linux:32 (KEY_D) -> qcode:Q_KEY_CODE_D (d) */\n+ [0xb] = Q_KEY_CODE_F, /* xorgxquartz:11 -> linux:33 (KEY_F) -> qcode:Q_KEY_CODE_F (f) */\n+ [0xc] = Q_KEY_CODE_H, /* xorgxquartz:12 -> linux:35 (KEY_H) -> qcode:Q_KEY_CODE_H (h) */\n+ [0xd] = Q_KEY_CODE_G, /* xorgxquartz:13 -> linux:34 (KEY_G) -> qcode:Q_KEY_CODE_G (g) */\n+ [0xe] = Q_KEY_CODE_Z, /* xorgxquartz:14 -> linux:44 (KEY_Z) -> qcode:Q_KEY_CODE_Z (z) */\n+ [0xf] = Q_KEY_CODE_X, /* xorgxquartz:15 -> linux:45 (KEY_X) -> qcode:Q_KEY_CODE_X (x) */\n+ [0x10] = Q_KEY_CODE_C, /* xorgxquartz:16 -> linux:46 (KEY_C) -> qcode:Q_KEY_CODE_C (c) */\n+ [0x11] = Q_KEY_CODE_V, /* xorgxquartz:17 -> linux:47 (KEY_V) -> qcode:Q_KEY_CODE_V (v) */\n+ [0x12] = Q_KEY_CODE_UNMAPPED, /* xorgxquartz:18 -> linux:170 (KEY_ISO) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x13] = Q_KEY_CODE_B, /* xorgxquartz:19 -> linux:48 (KEY_B) -> qcode:Q_KEY_CODE_B (b) */\n+ [0x14] = Q_KEY_CODE_Q, /* xorgxquartz:20 -> linux:16 (KEY_Q) -> qcode:Q_KEY_CODE_Q (q) */\n+ [0x15] = Q_KEY_CODE_W, /* xorgxquartz:21 -> linux:17 (KEY_W) -> qcode:Q_KEY_CODE_W (w) */\n+ [0x16] = Q_KEY_CODE_E, /* xorgxquartz:22 -> linux:18 (KEY_E) -> qcode:Q_KEY_CODE_E (e) */\n+ [0x17] = Q_KEY_CODE_R, /* xorgxquartz:23 -> linux:19 (KEY_R) -> qcode:Q_KEY_CODE_R (r) */\n+ [0x18] = Q_KEY_CODE_Y, /* xorgxquartz:24 -> linux:21 (KEY_Y) -> qcode:Q_KEY_CODE_Y (y) */\n+ [0x19] = Q_KEY_CODE_T, /* xorgxquartz:25 -> linux:20 (KEY_T) -> qcode:Q_KEY_CODE_T (t) */\n+ [0x1a] = Q_KEY_CODE_1, /* xorgxquartz:26 -> linux:2 (KEY_1) -> qcode:Q_KEY_CODE_1 (1) */\n+ [0x1b] = Q_KEY_CODE_2, /* xorgxquartz:27 -> linux:3 (KEY_2) -> qcode:Q_KEY_CODE_2 (2) */\n+ [0x1c] = Q_KEY_CODE_3, /* xorgxquartz:28 -> linux:4 (KEY_3) -> qcode:Q_KEY_CODE_3 (3) */\n+ [0x1d] = Q_KEY_CODE_4, /* xorgxquartz:29 -> linux:5 (KEY_4) -> qcode:Q_KEY_CODE_4 (4) */\n+ [0x1e] = Q_KEY_CODE_6, /* xorgxquartz:30 -> linux:7 (KEY_6) -> qcode:Q_KEY_CODE_6 (6) */\n+ [0x1f] = Q_KEY_CODE_5, /* xorgxquartz:31 -> linux:6 (KEY_5) -> qcode:Q_KEY_CODE_5 (5) */\n+ [0x20] = Q_KEY_CODE_EQUAL, /* xorgxquartz:32 -> linux:13 (KEY_EQUAL) -> qcode:Q_KEY_CODE_EQUAL (equal) */\n+ [0x21] = Q_KEY_CODE_9, /* xorgxquartz:33 -> linux:10 (KEY_9) -> qcode:Q_KEY_CODE_9 (9) */\n+ [0x22] = Q_KEY_CODE_7, /* xorgxquartz:34 -> linux:8 (KEY_7) -> qcode:Q_KEY_CODE_7 (7) */\n+ [0x23] = Q_KEY_CODE_MINUS, /* xorgxquartz:35 -> linux:12 (KEY_MINUS) -> qcode:Q_KEY_CODE_MINUS (minus) */\n+ [0x24] = Q_KEY_CODE_8, /* xorgxquartz:36 -> linux:9 (KEY_8) -> qcode:Q_KEY_CODE_8 (8) */\n+ [0x25] = Q_KEY_CODE_0, /* xorgxquartz:37 -> linux:11 (KEY_0) -> qcode:Q_KEY_CODE_0 (0) */\n+ [0x26] = Q_KEY_CODE_BRACKET_RIGHT, /* xorgxquartz:38 -> linux:27 (KEY_RIGHTBRACE) -> qcode:Q_KEY_CODE_BRACKET_RIGHT (bracket_right) */\n+ [0x27] = Q_KEY_CODE_O, /* xorgxquartz:39 -> linux:24 (KEY_O) -> qcode:Q_KEY_CODE_O (o) */\n+ [0x28] = Q_KEY_CODE_U, /* xorgxquartz:40 -> linux:22 (KEY_U) -> qcode:Q_KEY_CODE_U (u) */\n+ [0x29] = Q_KEY_CODE_BRACKET_LEFT, /* xorgxquartz:41 -> linux:26 (KEY_LEFTBRACE) -> qcode:Q_KEY_CODE_BRACKET_LEFT (bracket_left) */\n+ [0x2a] = Q_KEY_CODE_I, /* xorgxquartz:42 -> linux:23 (KEY_I) -> qcode:Q_KEY_CODE_I (i) */\n+ [0x2b] = Q_KEY_CODE_P, /* xorgxquartz:43 -> linux:25 (KEY_P) -> qcode:Q_KEY_CODE_P (p) */\n+ [0x2c] = Q_KEY_CODE_RET, /* xorgxquartz:44 -> linux:28 (KEY_ENTER) -> qcode:Q_KEY_CODE_RET (ret) */\n+ [0x2d] = Q_KEY_CODE_L, /* xorgxquartz:45 -> linux:38 (KEY_L) -> qcode:Q_KEY_CODE_L (l) */\n+ [0x2e] = Q_KEY_CODE_J, /* xorgxquartz:46 -> linux:36 (KEY_J) -> qcode:Q_KEY_CODE_J (j) */\n+ [0x2f] = Q_KEY_CODE_APOSTROPHE, /* xorgxquartz:47 -> linux:40 (KEY_APOSTROPHE) -> qcode:Q_KEY_CODE_APOSTROPHE (apostrophe) */\n+ [0x30] = Q_KEY_CODE_K, /* xorgxquartz:48 -> linux:37 (KEY_K) -> qcode:Q_KEY_CODE_K (k) */\n+ [0x31] = Q_KEY_CODE_SEMICOLON, /* xorgxquartz:49 -> linux:39 (KEY_SEMICOLON) -> qcode:Q_KEY_CODE_SEMICOLON (semicolon) */\n+ [0x32] = Q_KEY_CODE_BACKSLASH, /* xorgxquartz:50 -> linux:43 (KEY_BACKSLASH) -> qcode:Q_KEY_CODE_BACKSLASH (backslash) */\n+ [0x33] = Q_KEY_CODE_COMMA, /* xorgxquartz:51 -> linux:51 (KEY_COMMA) -> qcode:Q_KEY_CODE_COMMA (comma) */\n+ [0x34] = Q_KEY_CODE_SLASH, /* xorgxquartz:52 -> linux:53 (KEY_SLASH) -> qcode:Q_KEY_CODE_SLASH (slash) */\n+ [0x35] = Q_KEY_CODE_N, /* xorgxquartz:53 -> linux:49 (KEY_N) -> qcode:Q_KEY_CODE_N (n) */\n+ [0x36] = Q_KEY_CODE_M, /* xorgxquartz:54 -> linux:50 (KEY_M) -> qcode:Q_KEY_CODE_M (m) */\n+ [0x37] = Q_KEY_CODE_DOT, /* xorgxquartz:55 -> linux:52 (KEY_DOT) -> qcode:Q_KEY_CODE_DOT (dot) */\n+ [0x38] = Q_KEY_CODE_TAB, /* xorgxquartz:56 -> linux:15 (KEY_TAB) -> qcode:Q_KEY_CODE_TAB (tab) */\n+ [0x39] = Q_KEY_CODE_SPC, /* xorgxquartz:57 -> linux:57 (KEY_SPACE) -> qcode:Q_KEY_CODE_SPC (spc) */\n+ [0x3a] = Q_KEY_CODE_GRAVE_ACCENT, /* xorgxquartz:58 -> linux:41 (KEY_GRAVE) -> qcode:Q_KEY_CODE_GRAVE_ACCENT (grave_accent) */\n+ [0x3b] = Q_KEY_CODE_BACKSPACE, /* xorgxquartz:59 -> linux:14 (KEY_BACKSPACE) -> qcode:Q_KEY_CODE_BACKSPACE (backspace) */\n+ [0x3d] = Q_KEY_CODE_ESC, /* xorgxquartz:61 -> linux:1 (KEY_ESC) -> qcode:Q_KEY_CODE_ESC (esc) */\n+ [0x3e] = Q_KEY_CODE_META_R, /* xorgxquartz:62 -> linux:126 (KEY_RIGHTMETA) -> qcode:Q_KEY_CODE_META_R (meta_r) */\n+ [0x3f] = Q_KEY_CODE_META_L, /* xorgxquartz:63 -> linux:125 (KEY_LEFTMETA) -> qcode:Q_KEY_CODE_META_L (meta_l) */\n+ [0x40] = Q_KEY_CODE_SHIFT, /* xorgxquartz:64 -> linux:42 (KEY_LEFTSHIFT) -> qcode:Q_KEY_CODE_SHIFT (shift) */\n+ [0x41] = Q_KEY_CODE_CAPS_LOCK, /* xorgxquartz:65 -> linux:58 (KEY_CAPSLOCK) -> qcode:Q_KEY_CODE_CAPS_LOCK (caps_lock) */\n+ [0x42] = Q_KEY_CODE_ALT, /* xorgxquartz:66 -> linux:56 (KEY_LEFTALT) -> qcode:Q_KEY_CODE_ALT (alt) */\n+ [0x43] = Q_KEY_CODE_CTRL, /* xorgxquartz:67 -> linux:29 (KEY_LEFTCTRL) -> qcode:Q_KEY_CODE_CTRL (ctrl) */\n+ [0x44] = Q_KEY_CODE_SHIFT_R, /* xorgxquartz:68 -> linux:54 (KEY_RIGHTSHIFT) -> qcode:Q_KEY_CODE_SHIFT_R (shift_r) */\n+ [0x45] = Q_KEY_CODE_ALT_R, /* xorgxquartz:69 -> linux:100 (KEY_RIGHTALT) -> qcode:Q_KEY_CODE_ALT_R (alt_r) */\n+ [0x46] = Q_KEY_CODE_CTRL_R, /* xorgxquartz:70 -> linux:97 (KEY_RIGHTCTRL) -> qcode:Q_KEY_CODE_CTRL_R (ctrl_r) */\n+ [0x47] = Q_KEY_CODE_UNMAPPED, /* xorgxquartz:71 -> linux:464 (KEY_FN) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x48] = Q_KEY_CODE_UNMAPPED, /* xorgxquartz:72 -> linux:187 (KEY_F17) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x49] = Q_KEY_CODE_KP_DECIMAL, /* xorgxquartz:73 -> linux:83 (KEY_KPDOT) -> qcode:Q_KEY_CODE_KP_DECIMAL (kp_decimal) */\n+ [0x4b] = Q_KEY_CODE_KP_MULTIPLY, /* xorgxquartz:75 -> linux:55 (KEY_KPASTERISK) -> qcode:Q_KEY_CODE_KP_MULTIPLY (kp_multiply) */\n+ [0x4d] = Q_KEY_CODE_KP_ADD, /* xorgxquartz:77 -> linux:78 (KEY_KPPLUS) -> qcode:Q_KEY_CODE_KP_ADD (kp_add) */\n+ [0x4f] = Q_KEY_CODE_NUM_LOCK, /* xorgxquartz:79 -> linux:69 (KEY_NUMLOCK) -> qcode:Q_KEY_CODE_NUM_LOCK (num_lock) */\n+ [0x50] = Q_KEY_CODE_VOLUMEUP, /* xorgxquartz:80 -> linux:115 (KEY_VOLUMEUP) -> qcode:Q_KEY_CODE_VOLUMEUP (volumeup) */\n+ [0x51] = Q_KEY_CODE_VOLUMEDOWN, /* xorgxquartz:81 -> linux:114 (KEY_VOLUMEDOWN) -> qcode:Q_KEY_CODE_VOLUMEDOWN (volumedown) */\n+ [0x52] = Q_KEY_CODE_AUDIOMUTE, /* xorgxquartz:82 -> linux:113 (KEY_MUTE) -> qcode:Q_KEY_CODE_AUDIOMUTE (audiomute) */\n+ [0x53] = Q_KEY_CODE_KP_DIVIDE, /* xorgxquartz:83 -> linux:98 (KEY_KPSLASH) -> qcode:Q_KEY_CODE_KP_DIVIDE (kp_divide) */\n+ [0x54] = Q_KEY_CODE_KP_ENTER, /* xorgxquartz:84 -> linux:96 (KEY_KPENTER) -> qcode:Q_KEY_CODE_KP_ENTER (kp_enter) */\n+ [0x56] = Q_KEY_CODE_KP_SUBTRACT, /* xorgxquartz:86 -> linux:74 (KEY_KPMINUS) -> qcode:Q_KEY_CODE_KP_SUBTRACT (kp_subtract) */\n+ [0x57] = Q_KEY_CODE_UNMAPPED, /* xorgxquartz:87 -> linux:188 (KEY_F18) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x58] = Q_KEY_CODE_UNMAPPED, /* xorgxquartz:88 -> linux:189 (KEY_F19) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x59] = Q_KEY_CODE_KP_EQUALS, /* xorgxquartz:89 -> linux:117 (KEY_KPEQUAL) -> qcode:Q_KEY_CODE_KP_EQUALS (kp_equals) */\n+ [0x5a] = Q_KEY_CODE_KP_0, /* xorgxquartz:90 -> linux:82 (KEY_KP0) -> qcode:Q_KEY_CODE_KP_0 (kp_0) */\n+ [0x5b] = Q_KEY_CODE_KP_1, /* xorgxquartz:91 -> linux:79 (KEY_KP1) -> qcode:Q_KEY_CODE_KP_1 (kp_1) */\n+ [0x5c] = Q_KEY_CODE_KP_2, /* xorgxquartz:92 -> linux:80 (KEY_KP2) -> qcode:Q_KEY_CODE_KP_2 (kp_2) */\n+ [0x5d] = Q_KEY_CODE_KP_3, /* xorgxquartz:93 -> linux:81 (KEY_KP3) -> qcode:Q_KEY_CODE_KP_3 (kp_3) */\n+ [0x5e] = Q_KEY_CODE_KP_4, /* xorgxquartz:94 -> linux:75 (KEY_KP4) -> qcode:Q_KEY_CODE_KP_4 (kp_4) */\n+ [0x5f] = Q_KEY_CODE_KP_5, /* xorgxquartz:95 -> linux:76 (KEY_KP5) -> qcode:Q_KEY_CODE_KP_5 (kp_5) */\n+ [0x60] = Q_KEY_CODE_KP_6, /* xorgxquartz:96 -> linux:77 (KEY_KP6) -> qcode:Q_KEY_CODE_KP_6 (kp_6) */\n+ [0x61] = Q_KEY_CODE_KP_7, /* xorgxquartz:97 -> linux:71 (KEY_KP7) -> qcode:Q_KEY_CODE_KP_7 (kp_7) */\n+ [0x62] = Q_KEY_CODE_UNMAPPED, /* xorgxquartz:98 -> linux:190 (KEY_F20) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x63] = Q_KEY_CODE_KP_8, /* xorgxquartz:99 -> linux:72 (KEY_KP8) -> qcode:Q_KEY_CODE_KP_8 (kp_8) */\n+ [0x64] = Q_KEY_CODE_KP_9, /* xorgxquartz:100 -> linux:73 (KEY_KP9) -> qcode:Q_KEY_CODE_KP_9 (kp_9) */\n+ [0x65] = Q_KEY_CODE_YEN, /* xorgxquartz:101 -> linux:124 (KEY_YEN) -> qcode:Q_KEY_CODE_YEN (yen) */\n+ [0x67] = Q_KEY_CODE_UNMAPPED, /* xorgxquartz:103 -> linux:95 (KEY_KPJPCOMMA) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x68] = Q_KEY_CODE_F5, /* xorgxquartz:104 -> linux:63 (KEY_F5) -> qcode:Q_KEY_CODE_F5 (f5) */\n+ [0x69] = Q_KEY_CODE_F6, /* xorgxquartz:105 -> linux:64 (KEY_F6) -> qcode:Q_KEY_CODE_F6 (f6) */\n+ [0x6a] = Q_KEY_CODE_F7, /* xorgxquartz:106 -> linux:65 (KEY_F7) -> qcode:Q_KEY_CODE_F7 (f7) */\n+ [0x6b] = Q_KEY_CODE_F3, /* xorgxquartz:107 -> linux:61 (KEY_F3) -> qcode:Q_KEY_CODE_F3 (f3) */\n+ [0x6c] = Q_KEY_CODE_F8, /* xorgxquartz:108 -> linux:66 (KEY_F8) -> qcode:Q_KEY_CODE_F8 (f8) */\n+ [0x6d] = Q_KEY_CODE_F9, /* xorgxquartz:109 -> linux:67 (KEY_F9) -> qcode:Q_KEY_CODE_F9 (f9) */\n+ [0x6f] = Q_KEY_CODE_F11, /* xorgxquartz:111 -> linux:87 (KEY_F11) -> qcode:Q_KEY_CODE_F11 (f11) */\n+ [0x70] = Q_KEY_CODE_UNMAPPED, /* xorgxquartz:112 -> linux:90 (KEY_KATAKANA) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x71] = Q_KEY_CODE_UNMAPPED, /* xorgxquartz:113 -> linux:183 (KEY_F13) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x72] = Q_KEY_CODE_UNMAPPED, /* xorgxquartz:114 -> linux:186 (KEY_F16) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x73] = Q_KEY_CODE_UNMAPPED, /* xorgxquartz:115 -> linux:184 (KEY_F14) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x75] = Q_KEY_CODE_F10, /* xorgxquartz:117 -> linux:68 (KEY_F10) -> qcode:Q_KEY_CODE_F10 (f10) */\n+ [0x76] = Q_KEY_CODE_COMPOSE, /* xorgxquartz:118 -> linux:127 (KEY_COMPOSE) -> qcode:Q_KEY_CODE_COMPOSE (compose) */\n+ [0x77] = Q_KEY_CODE_F12, /* xorgxquartz:119 -> linux:88 (KEY_F12) -> qcode:Q_KEY_CODE_F12 (f12) */\n+ [0x79] = Q_KEY_CODE_UNMAPPED, /* xorgxquartz:121 -> linux:185 (KEY_F15) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x7a] = Q_KEY_CODE_HELP, /* xorgxquartz:122 -> linux:138 (KEY_HELP) -> qcode:Q_KEY_CODE_HELP (help) */\n+ [0x7b] = Q_KEY_CODE_HOME, /* xorgxquartz:123 -> linux:102 (KEY_HOME) -> qcode:Q_KEY_CODE_HOME (home) */\n+ [0x7c] = Q_KEY_CODE_PGUP, /* xorgxquartz:124 -> linux:104 (KEY_PAGEUP) -> qcode:Q_KEY_CODE_PGUP (pgup) */\n+ [0x7d] = Q_KEY_CODE_DELETE, /* xorgxquartz:125 -> linux:111 (KEY_DELETE) -> qcode:Q_KEY_CODE_DELETE (delete) */\n+ [0x7e] = Q_KEY_CODE_F4, /* xorgxquartz:126 -> linux:62 (KEY_F4) -> qcode:Q_KEY_CODE_F4 (f4) */\n+ [0x7f] = Q_KEY_CODE_END, /* xorgxquartz:127 -> linux:107 (KEY_END) -> qcode:Q_KEY_CODE_END (end) */\n+ [0x80] = Q_KEY_CODE_F2, /* xorgxquartz:128 -> linux:60 (KEY_F2) -> qcode:Q_KEY_CODE_F2 (f2) */\n+ [0x81] = Q_KEY_CODE_PGDN, /* xorgxquartz:129 -> linux:109 (KEY_PAGEDOWN) -> qcode:Q_KEY_CODE_PGDN (pgdn) */\n+ [0x82] = Q_KEY_CODE_F1, /* xorgxquartz:130 -> linux:59 (KEY_F1) -> qcode:Q_KEY_CODE_F1 (f1) */\n+ [0x83] = Q_KEY_CODE_LEFT, /* xorgxquartz:131 -> linux:105 (KEY_LEFT) -> qcode:Q_KEY_CODE_LEFT (left) */\n+ [0x84] = Q_KEY_CODE_RIGHT, /* xorgxquartz:132 -> linux:106 (KEY_RIGHT) -> qcode:Q_KEY_CODE_RIGHT (right) */\n+ [0x85] = Q_KEY_CODE_DOWN, /* xorgxquartz:133 -> linux:108 (KEY_DOWN) -> qcode:Q_KEY_CODE_DOWN (down) */\n+ [0x86] = Q_KEY_CODE_UP, /* xorgxquartz:134 -> linux:103 (KEY_UP) -> qcode:Q_KEY_CODE_UP (up) */\n+ [0x107] = Q_KEY_CODE_UNMAPPED, /* xorgxquartz:263 -> linux:0 (KEY_RESERVED) -> qcode:Q_KEY_CODE_UNMAPPED (unmapped) */\n+};\n+const guint qemu_input_map_xorgxquartz_to_qcode_len = sizeof(qemu_input_map_xorgxquartz_to_qcode)/sizeof(qemu_input_map_xorgxquartz_to_qcode[0]);\ndiff --git a/ui/input-keymap-xorgxwin-to-qcode.c b/ui/input-keymap-xorgxwin-to-qcode.c\nnew file mode 100644\nindex 0000000000..c71714daa8\n--- /dev/null\n+++ b/ui/input-keymap-xorgxwin-to-qcode.c\n@@ -0,0 +1,122 @@\n+/*\n+ * This file is auto-generated from keymaps.csv on 2017-08-31 11:08\n+ * Database checksum sha256(f8aeff0c3430077a350e3d7ba2b335b381bd929ac4b193413730a402ff3f0097)\n+ * To re-generate, run:\n+ * keymap-gen --lang=glib2 --varname=qemu_input_map_xorgxwin_to_qcode code-map keymaps.csv xorgxwin qcode\n+*/\n+const guint16 qemu_input_map_xorgxwin_to_qcode[209] = {\n+ [0x9] = Q_KEY_CODE_ESC, /* xorgxwin:9 -> linux:1 (KEY_ESC) -> qcode:Q_KEY_CODE_ESC (esc) */\n+ [0xa] = Q_KEY_CODE_1, /* xorgxwin:10 -> linux:2 (KEY_1) -> qcode:Q_KEY_CODE_1 (1) */\n+ [0xb] = Q_KEY_CODE_2, /* xorgxwin:11 -> linux:3 (KEY_2) -> qcode:Q_KEY_CODE_2 (2) */\n+ [0xc] = Q_KEY_CODE_3, /* xorgxwin:12 -> linux:4 (KEY_3) -> qcode:Q_KEY_CODE_3 (3) */\n+ [0xd] = Q_KEY_CODE_4, /* xorgxwin:13 -> linux:5 (KEY_4) -> qcode:Q_KEY_CODE_4 (4) */\n+ [0xe] = Q_KEY_CODE_5, /* xorgxwin:14 -> linux:6 (KEY_5) -> qcode:Q_KEY_CODE_5 (5) */\n+ [0xf] = Q_KEY_CODE_6, /* xorgxwin:15 -> linux:7 (KEY_6) -> qcode:Q_KEY_CODE_6 (6) */\n+ [0x10] = Q_KEY_CODE_7, /* xorgxwin:16 -> linux:8 (KEY_7) -> qcode:Q_KEY_CODE_7 (7) */\n+ [0x11] = Q_KEY_CODE_8, /* xorgxwin:17 -> linux:9 (KEY_8) -> qcode:Q_KEY_CODE_8 (8) */\n+ [0x12] = Q_KEY_CODE_9, /* xorgxwin:18 -> linux:10 (KEY_9) -> qcode:Q_KEY_CODE_9 (9) */\n+ [0x13] = Q_KEY_CODE_0, /* xorgxwin:19 -> linux:11 (KEY_0) -> qcode:Q_KEY_CODE_0 (0) */\n+ [0x14] = Q_KEY_CODE_MINUS, /* xorgxwin:20 -> linux:12 (KEY_MINUS) -> qcode:Q_KEY_CODE_MINUS (minus) */\n+ [0x15] = Q_KEY_CODE_EQUAL, /* xorgxwin:21 -> linux:13 (KEY_EQUAL) -> qcode:Q_KEY_CODE_EQUAL (equal) */\n+ [0x16] = Q_KEY_CODE_BACKSPACE, /* xorgxwin:22 -> linux:14 (KEY_BACKSPACE) -> qcode:Q_KEY_CODE_BACKSPACE (backspace) */\n+ [0x17] = Q_KEY_CODE_TAB, /* xorgxwin:23 -> linux:15 (KEY_TAB) -> qcode:Q_KEY_CODE_TAB (tab) */\n+ [0x18] = Q_KEY_CODE_Q, /* xorgxwin:24 -> linux:16 (KEY_Q) -> qcode:Q_KEY_CODE_Q (q) */\n+ [0x19] = Q_KEY_CODE_W, /* xorgxwin:25 -> linux:17 (KEY_W) -> qcode:Q_KEY_CODE_W (w) */\n+ [0x1a] = Q_KEY_CODE_E, /* xorgxwin:26 -> linux:18 (KEY_E) -> qcode:Q_KEY_CODE_E (e) */\n+ [0x1b] = Q_KEY_CODE_R, /* xorgxwin:27 -> linux:19 (KEY_R) -> qcode:Q_KEY_CODE_R (r) */\n+ [0x1c] = Q_KEY_CODE_T, /* xorgxwin:28 -> linux:20 (KEY_T) -> qcode:Q_KEY_CODE_T (t) */\n+ [0x1d] = Q_KEY_CODE_Y, /* xorgxwin:29 -> linux:21 (KEY_Y) -> qcode:Q_KEY_CODE_Y (y) */\n+ [0x1e] = Q_KEY_CODE_U, /* xorgxwin:30 -> linux:22 (KEY_U) -> qcode:Q_KEY_CODE_U (u) */\n+ [0x1f] = Q_KEY_CODE_I, /* xorgxwin:31 -> linux:23 (KEY_I) -> qcode:Q_KEY_CODE_I (i) */\n+ [0x20] = Q_KEY_CODE_O, /* xorgxwin:32 -> linux:24 (KEY_O) -> qcode:Q_KEY_CODE_O (o) */\n+ [0x21] = Q_KEY_CODE_P, /* xorgxwin:33 -> linux:25 (KEY_P) -> qcode:Q_KEY_CODE_P (p) */\n+ [0x22] = Q_KEY_CODE_BRACKET_LEFT, /* xorgxwin:34 -> linux:26 (KEY_LEFTBRACE) -> qcode:Q_KEY_CODE_BRACKET_LEFT (bracket_left) */\n+ [0x23] = Q_KEY_CODE_BRACKET_RIGHT, /* xorgxwin:35 -> linux:27 (KEY_RIGHTBRACE) -> qcode:Q_KEY_CODE_BRACKET_RIGHT (bracket_right) */\n+ [0x24] = Q_KEY_CODE_RET, /* xorgxwin:36 -> linux:28 (KEY_ENTER) -> qcode:Q_KEY_CODE_RET (ret) */\n+ [0x25] = Q_KEY_CODE_CTRL, /* xorgxwin:37 -> linux:29 (KEY_LEFTCTRL) -> qcode:Q_KEY_CODE_CTRL (ctrl) */\n+ [0x26] = Q_KEY_CODE_A, /* xorgxwin:38 -> linux:30 (KEY_A) -> qcode:Q_KEY_CODE_A (a) */\n+ [0x27] = Q_KEY_CODE_S, /* xorgxwin:39 -> linux:31 (KEY_S) -> qcode:Q_KEY_CODE_S (s) */\n+ [0x28] = Q_KEY_CODE_D, /* xorgxwin:40 -> linux:32 (KEY_D) -> qcode:Q_KEY_CODE_D (d) */\n+ [0x29] = Q_KEY_CODE_F, /* xorgxwin:41 -> linux:33 (KEY_F) -> qcode:Q_KEY_CODE_F (f) */\n+ [0x2a] = Q_KEY_CODE_G, /* xorgxwin:42 -> linux:34 (KEY_G) -> qcode:Q_KEY_CODE_G (g) */\n+ [0x2b] = Q_KEY_CODE_H, /* xorgxwin:43 -> linux:35 (KEY_H) -> qcode:Q_KEY_CODE_H (h) */\n+ [0x2c] = Q_KEY_CODE_J, /* xorgxwin:44 -> linux:36 (KEY_J) -> qcode:Q_KEY_CODE_J (j) */\n+ [0x2d] = Q_KEY_CODE_K, /* xorgxwin:45 -> linux:37 (KEY_K) -> qcode:Q_KEY_CODE_K (k) */\n+ [0x2e] = Q_KEY_CODE_L, /* xorgxwin:46 -> linux:38 (KEY_L) -> qcode:Q_KEY_CODE_L (l) */\n+ [0x2f] = Q_KEY_CODE_SEMICOLON, /* xorgxwin:47 -> linux:39 (KEY_SEMICOLON) -> qcode:Q_KEY_CODE_SEMICOLON (semicolon) */\n+ [0x30] = Q_KEY_CODE_APOSTROPHE, /* xorgxwin:48 -> linux:40 (KEY_APOSTROPHE) -> qcode:Q_KEY_CODE_APOSTROPHE (apostrophe) */\n+ [0x31] = Q_KEY_CODE_GRAVE_ACCENT, /* xorgxwin:49 -> linux:41 (KEY_GRAVE) -> qcode:Q_KEY_CODE_GRAVE_ACCENT (grave_accent) */\n+ [0x32] = Q_KEY_CODE_SHIFT, /* xorgxwin:50 -> linux:42 (KEY_LEFTSHIFT) -> qcode:Q_KEY_CODE_SHIFT (shift) */\n+ [0x33] = Q_KEY_CODE_BACKSLASH, /* xorgxwin:51 -> linux:43 (KEY_BACKSLASH) -> qcode:Q_KEY_CODE_BACKSLASH (backslash) */\n+ [0x34] = Q_KEY_CODE_Z, /* xorgxwin:52 -> linux:44 (KEY_Z) -> qcode:Q_KEY_CODE_Z (z) */\n+ [0x35] = Q_KEY_CODE_X, /* xorgxwin:53 -> linux:45 (KEY_X) -> qcode:Q_KEY_CODE_X (x) */\n+ [0x36] = Q_KEY_CODE_C, /* xorgxwin:54 -> linux:46 (KEY_C) -> qcode:Q_KEY_CODE_C (c) */\n+ [0x37] = Q_KEY_CODE_V, /* xorgxwin:55 -> linux:47 (KEY_V) -> qcode:Q_KEY_CODE_V (v) */\n+ [0x38] = Q_KEY_CODE_B, /* xorgxwin:56 -> linux:48 (KEY_B) -> qcode:Q_KEY_CODE_B (b) */\n+ [0x39] = Q_KEY_CODE_N, /* xorgxwin:57 -> linux:49 (KEY_N) -> qcode:Q_KEY_CODE_N (n) */\n+ [0x3a] = Q_KEY_CODE_M, /* xorgxwin:58 -> linux:50 (KEY_M) -> qcode:Q_KEY_CODE_M (m) */\n+ [0x3b] = Q_KEY_CODE_COMMA, /* xorgxwin:59 -> linux:51 (KEY_COMMA) -> qcode:Q_KEY_CODE_COMMA (comma) */\n+ [0x3c] = Q_KEY_CODE_DOT, /* xorgxwin:60 -> linux:52 (KEY_DOT) -> qcode:Q_KEY_CODE_DOT (dot) */\n+ [0x3d] = Q_KEY_CODE_SLASH, /* xorgxwin:61 -> linux:53 (KEY_SLASH) -> qcode:Q_KEY_CODE_SLASH (slash) */\n+ [0x3e] = Q_KEY_CODE_SHIFT_R, /* xorgxwin:62 -> linux:54 (KEY_RIGHTSHIFT) -> qcode:Q_KEY_CODE_SHIFT_R (shift_r) */\n+ [0x3f] = Q_KEY_CODE_KP_MULTIPLY, /* xorgxwin:63 -> linux:55 (KEY_KPASTERISK) -> qcode:Q_KEY_CODE_KP_MULTIPLY (kp_multiply) */\n+ [0x40] = Q_KEY_CODE_ALT, /* xorgxwin:64 -> linux:56 (KEY_LEFTALT) -> qcode:Q_KEY_CODE_ALT (alt) */\n+ [0x41] = Q_KEY_CODE_SPC, /* xorgxwin:65 -> linux:57 (KEY_SPACE) -> qcode:Q_KEY_CODE_SPC (spc) */\n+ [0x42] = Q_KEY_CODE_CAPS_LOCK, /* xorgxwin:66 -> linux:58 (KEY_CAPSLOCK) -> qcode:Q_KEY_CODE_CAPS_LOCK (caps_lock) */\n+ [0x43] = Q_KEY_CODE_F1, /* xorgxwin:67 -> linux:59 (KEY_F1) -> qcode:Q_KEY_CODE_F1 (f1) */\n+ [0x44] = Q_KEY_CODE_F2, /* xorgxwin:68 -> linux:60 (KEY_F2) -> qcode:Q_KEY_CODE_F2 (f2) */\n+ [0x45] = Q_KEY_CODE_F3, /* xorgxwin:69 -> linux:61 (KEY_F3) -> qcode:Q_KEY_CODE_F3 (f3) */\n+ [0x46] = Q_KEY_CODE_F4, /* xorgxwin:70 -> linux:62 (KEY_F4) -> qcode:Q_KEY_CODE_F4 (f4) */\n+ [0x47] = Q_KEY_CODE_F5, /* xorgxwin:71 -> linux:63 (KEY_F5) -> qcode:Q_KEY_CODE_F5 (f5) */\n+ [0x48] = Q_KEY_CODE_F6, /* xorgxwin:72 -> linux:64 (KEY_F6) -> qcode:Q_KEY_CODE_F6 (f6) */\n+ [0x49] = Q_KEY_CODE_F7, /* xorgxwin:73 -> linux:65 (KEY_F7) -> qcode:Q_KEY_CODE_F7 (f7) */\n+ [0x4a] = Q_KEY_CODE_F8, /* xorgxwin:74 -> linux:66 (KEY_F8) -> qcode:Q_KEY_CODE_F8 (f8) */\n+ [0x4b] = Q_KEY_CODE_F9, /* xorgxwin:75 -> linux:67 (KEY_F9) -> qcode:Q_KEY_CODE_F9 (f9) */\n+ [0x4c] = Q_KEY_CODE_F10, /* xorgxwin:76 -> linux:68 (KEY_F10) -> qcode:Q_KEY_CODE_F10 (f10) */\n+ [0x4d] = Q_KEY_CODE_NUM_LOCK, /* xorgxwin:77 -> linux:69 (KEY_NUMLOCK) -> qcode:Q_KEY_CODE_NUM_LOCK (num_lock) */\n+ [0x4e] = Q_KEY_CODE_SCROLL_LOCK, /* xorgxwin:78 -> linux:70 (KEY_SCROLLLOCK) -> qcode:Q_KEY_CODE_SCROLL_LOCK (scroll_lock) */\n+ [0x4f] = Q_KEY_CODE_KP_7, /* xorgxwin:79 -> linux:71 (KEY_KP7) -> qcode:Q_KEY_CODE_KP_7 (kp_7) */\n+ [0x50] = Q_KEY_CODE_KP_8, /* xorgxwin:80 -> linux:72 (KEY_KP8) -> qcode:Q_KEY_CODE_KP_8 (kp_8) */\n+ [0x51] = Q_KEY_CODE_KP_9, /* xorgxwin:81 -> linux:73 (KEY_KP9) -> qcode:Q_KEY_CODE_KP_9 (kp_9) */\n+ [0x52] = Q_KEY_CODE_KP_SUBTRACT, /* xorgxwin:82 -> linux:74 (KEY_KPMINUS) -> qcode:Q_KEY_CODE_KP_SUBTRACT (kp_subtract) */\n+ [0x53] = Q_KEY_CODE_KP_4, /* xorgxwin:83 -> linux:75 (KEY_KP4) -> qcode:Q_KEY_CODE_KP_4 (kp_4) */\n+ [0x54] = Q_KEY_CODE_KP_5, /* xorgxwin:84 -> linux:76 (KEY_KP5) -> qcode:Q_KEY_CODE_KP_5 (kp_5) */\n+ [0x55] = Q_KEY_CODE_KP_6, /* xorgxwin:85 -> linux:77 (KEY_KP6) -> qcode:Q_KEY_CODE_KP_6 (kp_6) */\n+ [0x56] = Q_KEY_CODE_KP_ADD, /* xorgxwin:86 -> linux:78 (KEY_KPPLUS) -> qcode:Q_KEY_CODE_KP_ADD (kp_add) */\n+ [0x57] = Q_KEY_CODE_KP_1, /* xorgxwin:87 -> linux:79 (KEY_KP1) -> qcode:Q_KEY_CODE_KP_1 (kp_1) */\n+ [0x58] = Q_KEY_CODE_KP_2, /* xorgxwin:88 -> linux:80 (KEY_KP2) -> qcode:Q_KEY_CODE_KP_2 (kp_2) */\n+ [0x59] = Q_KEY_CODE_KP_3, /* xorgxwin:89 -> linux:81 (KEY_KP3) -> qcode:Q_KEY_CODE_KP_3 (kp_3) */\n+ [0x5a] = Q_KEY_CODE_KP_0, /* xorgxwin:90 -> linux:82 (KEY_KP0) -> qcode:Q_KEY_CODE_KP_0 (kp_0) */\n+ [0x5b] = Q_KEY_CODE_KP_DECIMAL, /* xorgxwin:91 -> linux:83 (KEY_KPDOT) -> qcode:Q_KEY_CODE_KP_DECIMAL (kp_decimal) */\n+ [0x5e] = Q_KEY_CODE_LESS, /* xorgxwin:94 -> linux:86 (KEY_102ND) -> qcode:Q_KEY_CODE_LESS (less) */\n+ [0x5f] = Q_KEY_CODE_F11, /* xorgxwin:95 -> linux:87 (KEY_F11) -> qcode:Q_KEY_CODE_F11 (f11) */\n+ [0x60] = Q_KEY_CODE_F12, /* xorgxwin:96 -> linux:88 (KEY_F12) -> qcode:Q_KEY_CODE_F12 (f12) */\n+ [0x61] = Q_KEY_CODE_HOME, /* xorgxwin:97 -> linux:102 (KEY_HOME) -> qcode:Q_KEY_CODE_HOME (home) */\n+ [0x62] = Q_KEY_CODE_UP, /* xorgxwin:98 -> linux:103 (KEY_UP) -> qcode:Q_KEY_CODE_UP (up) */\n+ [0x63] = Q_KEY_CODE_PGUP, /* xorgxwin:99 -> linux:104 (KEY_PAGEUP) -> qcode:Q_KEY_CODE_PGUP (pgup) */\n+ [0x64] = Q_KEY_CODE_LEFT, /* xorgxwin:100 -> linux:105 (KEY_LEFT) -> qcode:Q_KEY_CODE_LEFT (left) */\n+ [0x66] = Q_KEY_CODE_RIGHT, /* xorgxwin:102 -> linux:106 (KEY_RIGHT) -> qcode:Q_KEY_CODE_RIGHT (right) */\n+ [0x67] = Q_KEY_CODE_END, /* xorgxwin:103 -> linux:107 (KEY_END) -> qcode:Q_KEY_CODE_END (end) */\n+ [0x68] = Q_KEY_CODE_DOWN, /* xorgxwin:104 -> linux:108 (KEY_DOWN) -> qcode:Q_KEY_CODE_DOWN (down) */\n+ [0x69] = Q_KEY_CODE_PGDN, /* xorgxwin:105 -> linux:109 (KEY_PAGEDOWN) -> qcode:Q_KEY_CODE_PGDN (pgdn) */\n+ [0x6a] = Q_KEY_CODE_INSERT, /* xorgxwin:106 -> linux:110 (KEY_INSERT) -> qcode:Q_KEY_CODE_INSERT (insert) */\n+ [0x6b] = Q_KEY_CODE_DELETE, /* xorgxwin:107 -> linux:111 (KEY_DELETE) -> qcode:Q_KEY_CODE_DELETE (delete) */\n+ [0x6c] = Q_KEY_CODE_KP_ENTER, /* xorgxwin:108 -> linux:96 (KEY_KPENTER) -> qcode:Q_KEY_CODE_KP_ENTER (kp_enter) */\n+ [0x6d] = Q_KEY_CODE_CTRL_R, /* xorgxwin:109 -> linux:97 (KEY_RIGHTCTRL) -> qcode:Q_KEY_CODE_CTRL_R (ctrl_r) */\n+ [0x6e] = Q_KEY_CODE_PAUSE, /* xorgxwin:110 -> linux:119 (KEY_PAUSE) -> qcode:Q_KEY_CODE_PAUSE (pause) */\n+ [0x6f] = Q_KEY_CODE_SYSRQ, /* xorgxwin:111 -> linux:99 (KEY_SYSRQ) -> qcode:Q_KEY_CODE_SYSRQ (sysrq) */\n+ [0x70] = Q_KEY_CODE_KP_DIVIDE, /* xorgxwin:112 -> linux:98 (KEY_KPSLASH) -> qcode:Q_KEY_CODE_KP_DIVIDE (kp_divide) */\n+ [0x71] = Q_KEY_CODE_ALT_R, /* xorgxwin:113 -> linux:100 (KEY_RIGHTALT) -> qcode:Q_KEY_CODE_ALT_R (alt_r) */\n+ [0x73] = Q_KEY_CODE_META_L, /* xorgxwin:115 -> linux:125 (KEY_LEFTMETA) -> qcode:Q_KEY_CODE_META_L (meta_l) */\n+ [0x74] = Q_KEY_CODE_META_R, /* xorgxwin:116 -> linux:126 (KEY_RIGHTMETA) -> qcode:Q_KEY_CODE_META_R (meta_r) */\n+ [0x75] = Q_KEY_CODE_COMPOSE, /* xorgxwin:117 -> linux:127 (KEY_COMPOSE) -> qcode:Q_KEY_CODE_COMPOSE (compose) */\n+ [0x76] = Q_KEY_CODE_UNMAPPED, /* xorgxwin:118 -> linux:183 (KEY_F13) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x77] = Q_KEY_CODE_UNMAPPED, /* xorgxwin:119 -> linux:184 (KEY_F14) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x78] = Q_KEY_CODE_UNMAPPED, /* xorgxwin:120 -> linux:185 (KEY_F15) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x79] = Q_KEY_CODE_UNMAPPED, /* xorgxwin:121 -> linux:186 (KEY_F16) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x7a] = Q_KEY_CODE_UNMAPPED, /* xorgxwin:122 -> linux:187 (KEY_F17) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+ [0x7e] = Q_KEY_CODE_KP_EQUALS, /* xorgxwin:126 -> linux:117 (KEY_KPEQUAL) -> qcode:Q_KEY_CODE_KP_EQUALS (kp_equals) */\n+ [0x85] = Q_KEY_CODE_YEN, /* xorgxwin:133 -> linux:124 (KEY_YEN) -> qcode:Q_KEY_CODE_YEN (yen) */\n+ [0xd0] = Q_KEY_CODE_UNMAPPED, /* xorgxwin:208 -> linux:93 (KEY_KATAKANAHIRAGANA) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+};\n+const guint qemu_input_map_xorgxwin_to_qcode_len = sizeof(qemu_input_map_xorgxwin_to_qcode)/sizeof(qemu_input_map_xorgxwin_to_qcode[0]);\ndiff --git a/ui/input-keymap.c b/ui/input-keymap.c\nindex ad98b153cf..908d58ea63 100644\n--- a/ui/input-keymap.c\n+++ b/ui/input-keymap.c\n@@ -5,6 +5,7 @@\n \n #include \"standard-headers/linux/input.h\"\n \n+#include \"ui/input-keymap-atset1-to-qcode.c\"\n #include \"ui/input-keymap-linux-to-qcode.c\"\n #include \"ui/input-keymap-osx-to-qcode.c\"\n #include \"ui/input-keymap-qcode-to-adb.c\"\n@@ -16,6 +17,12 @@\n #include \"ui/input-keymap-qcode-to-sun.c\"\n #include \"ui/input-keymap-qnum-to-qcode.c\"\n #include \"ui/input-keymap-usb-to-qcode.c\"\n+#include \"ui/input-keymap-win32-to-qcode.c\"\n+#include \"ui/input-keymap-x11-to-qcode.c\"\n+#include \"ui/input-keymap-xorgevdev-to-qcode.c\"\n+#include \"ui/input-keymap-xorgkbd-to-qcode.c\"\n+#include \"ui/input-keymap-xorgxquartz-to-qcode.c\"\n+#include \"ui/input-keymap-xorgxwin-to-qcode.c\"\n \n int qemu_input_linux_to_qcode(unsigned int lnx)\n {\ndiff --git a/ui/sdl.c b/ui/sdl.c\nindex 7b71a9ac58..afb4992da2 100644\n--- a/ui/sdl.c\n+++ b/ui/sdl.c\n@@ -34,7 +34,9 @@\n #include \"ui/console.h\"\n #include \"ui/input.h\"\n #include \"sysemu/sysemu.h\"\n+#ifndef WIN32\n #include \"x_keymap.h\"\n+#endif\n #include \"sdl_zoom.h\"\n \n static DisplayChangeListener *dcl;\n@@ -63,6 +65,8 @@ static SDL_PixelFormat host_format;\n static int scaling_active = 0;\n static Notifier mouse_mode_notifier;\n static int idle_counter;\n+static const guint16 *keycode_map;\n+static size_t keycode_maplen;\n \n #define SDL_REFRESH_INTERVAL_BUSY 10\n #define SDL_MAX_IDLE_COUNT (2 * GUI_REFRESH_INTERVAL_DEFAULT \\\n@@ -208,94 +212,45 @@ static uint8_t sdl_keyevent_to_keycode_generic(const SDL_KeyboardEvent *ev)\n return keysym2scancode(kbd_layout, keysym) & SCANCODE_KEYMASK;\n }\n \n-/* specific keyboard conversions from scan codes */\n-\n-#if defined(_WIN32)\n \n-static uint8_t sdl_keyevent_to_keycode(const SDL_KeyboardEvent *ev)\n+static const guint16 *sdl_get_keymap(size_t *maplen)\n {\n- return ev->keysym.scancode;\n-}\n-\n+#if defined(WIN32)\n+ *maplen = qemu_input_map_atset1_to_qcode_len;\n+ return qemu_input_map_atset1_to_qcode;\n #else\n-\n #if defined(SDL_VIDEO_DRIVER_X11)\n-#include <X11/XKBlib.h>\n-\n-static int check_for_evdev(void)\n-{\n SDL_SysWMinfo info;\n- XkbDescPtr desc = NULL;\n- int has_evdev = 0;\n- char *keycodes = NULL;\n \n SDL_VERSION(&info.version);\n- if (!SDL_GetWMInfo(&info)) {\n- return 0;\n+ if (SDL_GetWMInfo(&info) > 0) {\n+ return qemu_xkeymap_mapping_table(\n+ info.info.x11.display, maplen);\n }\n- desc = XkbGetMap(info.info.x11.display,\n- XkbGBN_AllComponentsMask,\n- XkbUseCoreKbd);\n- if (desc &&\n- (XkbGetNames(info.info.x11.display,\n- XkbKeycodesNameMask, desc) == Success)) {\n- keycodes = XGetAtomName(info.info.x11.display, desc->names->keycodes);\n- if (keycodes == NULL) {\n- fprintf(stderr, \"could not lookup keycode name\\n\");\n- } else if (strstart(keycodes, \"evdev\", NULL)) {\n- has_evdev = 1;\n- } else if (!strstart(keycodes, \"xfree86\", NULL)) {\n- fprintf(stderr, \"unknown keycodes `%s', please report to \"\n- \"qemu-devel@nongnu.org\\n\", keycodes);\n- }\n- }\n-\n- if (desc) {\n- XkbFreeKeyboard(desc, XkbGBN_AllComponentsMask, True);\n- }\n- if (keycodes) {\n- XFree(keycodes);\n- }\n- return has_evdev;\n-}\n-#else\n-static int check_for_evdev(void)\n-{\n-\treturn 0;\n-}\n #endif\n+ g_warning(\"Unsupported SDL video driver / platform.\\n\"\n+ \"Assuming Linux KBD scancodes, but probably wrong.\\n\"\n+ \"Please report to qemu-devel@nongnu.org\\n\"\n+ \"including the following information:\\n\"\n+ \"\\n\"\n+ \" - Operating system\\n\"\n+ \" - SDL video driver\\n\");\n+ *maplen = qemu_input_map_xorgkbd_to_qcode_len;\n+ return qemu_input_map_xorgkbd_to_qcode;\n+#endif\n+}\n \n static uint8_t sdl_keyevent_to_keycode(const SDL_KeyboardEvent *ev)\n {\n- int keycode;\n- static int has_evdev = -1;\n-\n- if (has_evdev == -1)\n- has_evdev = check_for_evdev();\n-\n- keycode = ev->keysym.scancode;\n-\n- if (keycode < 9) {\n- keycode = 0;\n- } else if (keycode < 97) {\n- keycode -= 8; /* just an offset */\n- } else if (keycode < 158) {\n- /* use conversion table */\n- if (has_evdev)\n- keycode = translate_evdev_keycode(keycode - 97);\n- else\n- keycode = translate_xfree86_keycode(keycode - 97);\n- } else if (keycode == 208) { /* Hiragana_Katakana */\n- keycode = 0x70;\n- } else if (keycode == 211) { /* backslash */\n- keycode = 0x73;\n- } else {\n- keycode = 0;\n+ if (!keycode_map) {\n+ return 0;\n+ }\n+ if (ev->keysym.scancode > keycode_maplen) {\n+ return 0;\n }\n- return keycode;\n-}\n \n-#endif\n+ return keycode_map[ev->keysym.scancode];\n+}\n \n static void reset_keys(void)\n {\n@@ -995,6 +950,8 @@ void sdl_display_init(DisplayState *ds, int full_screen, int no_frame)\n vi = SDL_GetVideoInfo();\n host_format = *(vi->vfmt);\n \n+ keycode_map = sdl_get_keymap(&keycode_maplen);\n+\n /* Load a 32x32x4 image. White pixels are transparent. */\n filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, \"qemu-icon.bmp\");\n if (filename) {\ndiff --git a/ui/trace-events b/ui/trace-events\nindex 34c2213700..9a943f645d 100644\n--- a/ui/trace-events\n+++ b/ui/trace-events\n@@ -18,9 +18,10 @@ ppm_save(const char *filename, void *display_surface) \"%s surface=%p\"\n # ui/gtk.c\n gd_switch(const char *tab, int width, int height) \"tab=%s, width=%d, height=%d\"\n gd_update(const char *tab, int x, int y, int w, int h) \"tab=%s, x=%d, y=%d, w=%d, h=%d\"\n-gd_key_event(const char *tab, int gdk_keycode, int qemu_keycode, const char *action) \"tab=%s, translated GDK keycode %d to QEMU keycode %d (%s)\"\n+gd_key_event(const char *tab, int gdk_keycode, int qkeycode, const char *action) \"tab=%s, translated GDK keycode %d to QKeyCode %d (%s)\"\n gd_grab(const char *tab, const char *device, const char *reason) \"tab=%s, dev=%s, reason=%s\"\n gd_ungrab(const char *tab, const char *device) \"tab=%s, dev=%s\"\n+gd_keymap_windowing(const char *name) \"backend=%s\"\n \n # ui/vnc.c\n vnc_key_guest_leds(bool caps, bool num, bool scroll) \"caps %d, num %d, scroll %d\"\n@@ -51,3 +52,9 @@ qemu_spice_create_update(uint32_t left, uint32_t right, uint32_t top, uint32_t b\n keymap_parse(const char *file) \"file %s\"\n keymap_add(const char *type, int sym, int code, const char *line) \"%-6s sym=0x%04x code=0x%04x (line: %s)\"\n keymap_unmapped(int sym) \"sym=0x%04x\"\n+\n+# ui/x_keymap.c\n+xkeymap_extension(const char *name) \"extension '%s'\"\n+xkeymap_vendor(const char *name) \"vendor '%s'\"\n+xkeymap_keycodes(const char *name) \"keycodes '%s'\"\n+xkeymap_keymap(const char *name) \"keymap '%s'\"\ndiff --git a/ui/x_keymap.c b/ui/x_keymap.c\nindex 27884851de..22e0e77c4d 100644\n--- a/ui/x_keymap.c\n+++ b/ui/x_keymap.c\n@@ -1,169 +1,111 @@\n /*\n- * QEMU SDL display driver\n+ * QEMU X11 keymaps\n *\n- * Copyright (c) 2003 Fabrice Bellard\n+ * Copyright (C) 2009-2010 Daniel P. Berrange <dan@berrange.com>\n+ * Copyright (C) 2017 Red Hat, Inc\n *\n- * Permission is hereby granted, free of charge, to any person obtaining a copy\n- * of this software and associated documentation files (the \"Software\"), to deal\n- * in the Software without restriction, including without limitation the rights\n- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n- * copies of the Software, and to permit persons to whom the Software is\n- * furnished to do so, subject to the following conditions:\n- *\n- * The above copyright notice and this permission notice shall be included in\n- * all copies or substantial portions of the Software.\n- *\n- * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n- * THE SOFTWARE.\n+ * This program is free software; you can redistribute it and/or modify\n+ * it under the terms of the GNU Lesser General Public License version 2 as\n+ * published by the Free Software Foundation.\n */\n+\n #include \"qemu/osdep.h\"\n-#include \"qemu-common.h\"\n+\n #include \"x_keymap.h\"\n+#include \"trace.h\"\n+#include \"qemu/notify.h\"\n+#include \"ui/input.h\"\n \n-static const uint8_t x_keycode_to_pc_keycode[115] = {\n- 0xc7, /* 97 Home */\n- 0xc8, /* 98 Up */\n- 0xc9, /* 99 PgUp */\n- 0xcb, /* 100 Left */\n- 0x4c, /* 101 KP-5 */\n- 0xcd, /* 102 Right */\n- 0xcf, /* 103 End */\n- 0xd0, /* 104 Down */\n- 0xd1, /* 105 PgDn */\n- 0xd2, /* 106 Ins */\n- 0xd3, /* 107 Del */\n- 0x9c, /* 108 Enter */\n- 0x9d, /* 109 Ctrl-R */\n- 0x0, /* 110 Pause */\n- 0xb7, /* 111 Print */\n- 0xb5, /* 112 Divide */\n- 0xb8, /* 113 Alt-R */\n- 0xc6, /* 114 Break */\n- 0x0, /* 115 */\n- 0x0, /* 116 */\n- 0x0, /* 117 */\n- 0x0, /* 118 */\n- 0x0, /* 119 */\n- 0x0, /* 120 */\n- 0x0, /* 121 */\n- 0x0, /* 122 */\n- 0x0, /* 123 */\n- 0x0, /* 124 */\n- 0x0, /* 125 */\n- 0x0, /* 126 */\n- 0x0, /* 127 */\n- 0x0, /* 128 */\n- 0x79, /* 129 Henkan */\n- 0x0, /* 130 */\n- 0x7b, /* 131 Muhenkan */\n- 0x0, /* 132 */\n- 0x7d, /* 133 Yen */\n- 0x0, /* 134 */\n- 0x0, /* 135 */\n- 0x47, /* 136 KP_7 */\n- 0x48, /* 137 KP_8 */\n- 0x49, /* 138 KP_9 */\n- 0x4b, /* 139 KP_4 */\n- 0x4c, /* 140 KP_5 */\n- 0x4d, /* 141 KP_6 */\n- 0x4f, /* 142 KP_1 */\n- 0x50, /* 143 KP_2 */\n- 0x51, /* 144 KP_3 */\n- 0x52, /* 145 KP_0 */\n- 0x53, /* 146 KP_. */\n- 0x47, /* 147 KP_HOME */\n- 0x48, /* 148 KP_UP */\n- 0x49, /* 149 KP_PgUp */\n- 0x4b, /* 150 KP_Left */\n- 0x4c, /* 151 KP_ */\n- 0x4d, /* 152 KP_Right */\n- 0x4f, /* 153 KP_End */\n- 0x50, /* 154 KP_Down */\n- 0x51, /* 155 KP_PgDn */\n- 0x52, /* 156 KP_Ins */\n- 0x53, /* 157 KP_Del */\n-};\n+#include <X11/XKBlib.h>\n \n-/* This table is generated based off the xfree86 -> scancode mapping above\n- * and the keycode mappings in /usr/share/X11/xkb/keycodes/evdev\n- * and /usr/share/X11/xkb/keycodes/xfree86\n- */\n+static gboolean check_for_xwin(Display *dpy)\n+{\n+ const char *vendor = ServerVendor(dpy);\n+\n+ trace_xkeymap_vendor(vendor);\n \n-static const uint8_t evdev_keycode_to_pc_keycode[61] = {\n- 0x73, /* 97 EVDEV - RO (\"Internet\" Keyboards) */\n- 0, /* 98 EVDEV - KATA (Katakana) */\n- 0, /* 99 EVDEV - HIRA (Hiragana) */\n- 0x79, /* 100 EVDEV - HENK (Henkan) */\n- 0x70, /* 101 EVDEV - HKTG (Hiragana/Katakana toggle) */\n- 0x7b, /* 102 EVDEV - MUHE (Muhenkan) */\n- 0, /* 103 EVDEV - JPCM (KPJPComma) */\n- 0x9c, /* 104 KPEN */\n- 0x9d, /* 105 RCTL */\n- 0xb5, /* 106 KPDV */\n- 0xb7, /* 107 PRSC */\n- 0xb8, /* 108 RALT */\n- 0, /* 109 EVDEV - LNFD (\"Internet\" Keyboards) */\n- 0xc7, /* 110 HOME */\n- 0xc8, /* 111 UP */\n- 0xc9, /* 112 PGUP */\n- 0xcb, /* 113 LEFT */\n- 0xcd, /* 114 RGHT */\n- 0xcf, /* 115 END */\n- 0xd0, /* 116 DOWN */\n- 0xd1, /* 117 PGDN */\n- 0xd2, /* 118 INS */\n- 0xd3, /* 119 DELE */\n- 0, /* 120 EVDEV - I120 (\"Internet\" Keyboards) */\n- 0, /* 121 EVDEV - MUTE */\n- 0, /* 122 EVDEV - VOL- */\n- 0, /* 123 EVDEV - VOL+ */\n- 0, /* 124 EVDEV - POWR */\n- 0, /* 125 EVDEV - KPEQ */\n- 0, /* 126 EVDEV - I126 (\"Internet\" Keyboards) */\n- 0, /* 127 EVDEV - PAUS */\n- 0, /* 128 EVDEV - ???? */\n- 0x7e, /* 129 EVDEV - KP_COMMA (brazilian) */\n- 0xf1, /* 130 EVDEV - HNGL (Korean Hangul Latin toggle) */\n- 0xf2, /* 131 EVDEV - HJCV (Korean Hangul Hanja toggle) */\n- 0x7d, /* 132 AE13 (Yen)*/\n- 0xdb, /* 133 EVDEV - LWIN */\n- 0xdc, /* 134 EVDEV - RWIN */\n- 0xdd, /* 135 EVDEV - MENU */\n- 0, /* 136 EVDEV - STOP */\n- 0, /* 137 EVDEV - AGAI */\n- 0, /* 138 EVDEV - PROP */\n- 0, /* 139 EVDEV - UNDO */\n- 0, /* 140 EVDEV - FRNT */\n- 0, /* 141 EVDEV - COPY */\n- 0, /* 142 EVDEV - OPEN */\n- 0, /* 143 EVDEV - PAST */\n- 0, /* 144 EVDEV - FIND */\n- 0, /* 145 EVDEV - CUT */\n- 0, /* 146 EVDEV - HELP */\n- 0, /* 147 EVDEV - I147 */\n- 0, /* 148 EVDEV - I148 */\n- 0, /* 149 EVDEV - I149 */\n- 0, /* 150 EVDEV - I150 */\n- 0, /* 151 EVDEV - I151 */\n- 0, /* 152 EVDEV - I152 */\n- 0, /* 153 EVDEV - I153 */\n- 0, /* 154 EVDEV - I154 */\n- 0, /* 155 EVDEV - I156 */\n- 0, /* 156 EVDEV - I157 */\n- 0, /* 157 EVDEV - I158 */\n-};\n+ if (strstr(vendor, \"Cygwin/X\")) {\n+ return TRUE;\n+ }\n \n-uint8_t translate_xfree86_keycode(const int key)\n+ return FALSE;\n+}\n+\n+static gboolean check_for_xquartz(Display *dpy)\n {\n- return x_keycode_to_pc_keycode[key];\n+ int nextensions;\n+ int i;\n+ gboolean match = FALSE;\n+ char **extensions = XListExtensions(dpy, &nextensions);\n+ for (i = 0 ; extensions != NULL && i < nextensions ; i++) {\n+ trace_xkeymap_extension(extensions[i]);\n+ if (strcmp(extensions[i], \"Apple-WM\") == 0 ||\n+ strcmp(extensions[i], \"Apple-DRI\") == 0) {\n+ match = TRUE;\n+ }\n+ }\n+ if (extensions) {\n+ XFreeExtensionList(extensions);\n+ }\n+\n+ return match;\n }\n \n-uint8_t translate_evdev_keycode(const int key)\n+const guint16 *qemu_xkeymap_mapping_table(Display *dpy, size_t *maplen)\n {\n- return evdev_keycode_to_pc_keycode[key];\n+ XkbDescPtr desc;\n+ const gchar *keycodes = NULL;\n+\n+ /* There is no easy way to determine what X11 server\n+ * and platform & keyboard driver is in use. Thus we\n+ * do best guess heuristics.\n+ *\n+ * This will need more work for people with other\n+ * X servers..... patches welcomed.\n+ */\n+\n+ desc = XkbGetMap(dpy,\n+ XkbGBN_AllComponentsMask,\n+ XkbUseCoreKbd);\n+ if (desc) {\n+ if (XkbGetNames(dpy, XkbKeycodesNameMask, desc) == Success) {\n+ keycodes = XGetAtomName (dpy, desc->names->keycodes);\n+ if (!keycodes) {\n+ g_warning(\"could not lookup keycode name\");\n+ } else {\n+ trace_xkeymap_keycodes(keycodes);\n+ }\n+ }\n+ XkbFreeKeyboard(desc, XkbGBN_AllComponentsMask, True);\n+ }\n+\n+ if (check_for_xwin(dpy)) {\n+ trace_xkeymap_keymap(\"xwin\");\n+ *maplen = qemu_input_map_xorgxwin_to_qcode_len;\n+ return qemu_input_map_xorgxwin_to_qcode;\n+ } else if (check_for_xquartz(dpy)) {\n+ trace_xkeymap_keymap(\"xquartz\");\n+ *maplen = qemu_input_map_xorgxquartz_to_qcode_len;\n+ return qemu_input_map_xorgxquartz_to_qcode;\n+ } else if (keycodes && g_str_has_prefix(keycodes, \"evdev\")) {\n+ trace_xkeymap_keymap(\"evdev\");\n+ *maplen = qemu_input_map_xorgevdev_to_qcode_len;\n+ return qemu_input_map_xorgevdev_to_qcode;\n+ } else if (keycodes && g_str_has_prefix(keycodes, \"xfree86\")) {\n+ trace_xkeymap_keymap(\"kbd\");\n+ *maplen = qemu_input_map_xorgkbd_to_qcode_len;\n+ return qemu_input_map_xorgkbd_to_qcode;\n+ } else {\n+ trace_xkeymap_keymap(\"NULL\");\n+ g_warning(\"Unknown X11 keycode mapping '%s'.\\n\"\n+ \"Please report to qemu-devel@nongnu.org\\n\"\n+ \"including the following information:\\n\"\n+ \"\\n\"\n+ \" - Operating system\\n\"\n+ \" - X11 Server\\n\"\n+ \" - xprop -root\\n\"\n+ \" - xdpyinfo\\n\",\n+ keycodes ? keycodes : \"<null>\");\n+ return NULL;\n+ }\n }\ndiff --git a/ui/x_keymap.h b/ui/x_keymap.h\nindex afde2e94bf..0395e335ff 100644\n--- a/ui/x_keymap.h\n+++ b/ui/x_keymap.h\n@@ -1,7 +1,7 @@\n /*\n- * QEMU SDL display driver\n+ * QEMU X11 keymaps\n *\n- * Copyright (c) 2003 Fabrice Bellard\n+ * Copyright (c) 2017 Red Hat, Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n@@ -25,8 +25,8 @@\n #ifndef QEMU_X_KEYMAP_H\n #define QEMU_X_KEYMAP_H\n \n-uint8_t translate_xfree86_keycode(const int key);\n+#include <X11/Xlib.h>\n \n-uint8_t translate_evdev_keycode(const int key);\n+const guint16 *qemu_xkeymap_mapping_table(Display *dpy, size_t *maplen);\n \n #endif\n", "prefixes": [ "v5", "11/12" ] }