get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/812828/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 812828,
    "url": "http://patchwork.ozlabs.org/api/patches/812828/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20170912123744.14730-10-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-10-berrange@redhat.com>",
    "list_archive_url": null,
    "date": "2017-09-12T12:37:41",
    "name": "[v5,09/12] ui: convert cocoa frontend to keycodemapdb",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "2075306db80deb73e9a98f01ef1bab858fdc8935",
    "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-10-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/812828/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/812828/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-mx04.extmail.prod.ext.phx2.redhat.com;\n\tdmarc=none (p=none dis=none) header.from=redhat.com",
            "ext-mx04.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 3xs4RZ1zxKz9t9N\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue, 12 Sep 2017 22:50:37 +1000 (AEST)",
            "from localhost ([::1]:35600 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 1drkYG-0006I0-DX\n\tfor incoming@patchwork.ozlabs.org; Tue, 12 Sep 2017 08:44:28 -0400",
            "from eggs.gnu.org ([2001:4830:134:3::10]:48706)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <berrange@redhat.com>) id 1drkSG-0000sx-AC\n\tfor qemu-devel@nongnu.org; Tue, 12 Sep 2017 08:38:19 -0400",
            "from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <berrange@redhat.com>) id 1drkS5-0003Td-4P\n\tfor qemu-devel@nongnu.org; Tue, 12 Sep 2017 08:38:16 -0400",
            "from mx1.redhat.com ([209.132.183.28]:57538)\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 1drkS4-0003T8-QN\n\tfor qemu-devel@nongnu.org; Tue, 12 Sep 2017 08:38:05 -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 D40587EA85\n\tfor <qemu-devel@nongnu.org>; Tue, 12 Sep 2017 12:38:03 +0000 (UTC)",
            "from localhost.localdomain.com (unknown [10.42.22.189])\n\tby smtp.corp.redhat.com (Postfix) with ESMTP id 0D02F77D65;\n\tTue, 12 Sep 2017 12:38:02 +0000 (UTC)"
        ],
        "DMARC-Filter": "OpenDMARC Filter v1.3.2 mx1.redhat.com D40587EA85",
        "From": "\"Daniel P. Berrange\" <berrange@redhat.com>",
        "To": "qemu-devel@nongnu.org",
        "Date": "Tue, 12 Sep 2017 13:37:41 +0100",
        "Message-Id": "<20170912123744.14730-10-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.28]);\n\tTue, 12 Sep 2017 12:38:03 +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 09/12] ui: convert cocoa frontend 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": "Replace the mac_to_qkeycode_map table with automatically\ngenerated table.\n\nSigned-off-by: Daniel P. Berrange <berrange@redhat.com>\n---\n include/ui/input.h             |   3 +\n ui/Makefile.objs               |   1 +\n ui/cocoa.m                     | 129 +----------------------------------------\n ui/input-keymap-osx-to-qcode.c | 128 ++++++++++++++++++++++++++++++++++++++++\n ui/input-keymap.c              |   1 +\n 5 files changed, 135 insertions(+), 127 deletions(-)\n create mode 100644 ui/input-keymap-osx-to-qcode.c",
    "diff": "diff --git a/include/ui/input.h b/include/ui/input.h\nindex 4ba7340b7b..df3eb439bf 100644\n--- a/include/ui/input.h\n+++ b/include/ui/input.h\n@@ -71,6 +71,9 @@ void qemu_remove_mouse_mode_change_notifier(Notifier *notify);\n extern const guint qemu_input_map_linux_to_qcode_len;\n extern const guint16 qemu_input_map_linux_to_qcode[];\n \n+extern const guint qemu_input_map_osx_to_qcode_len;\n+extern const guint16 qemu_input_map_osx_to_qcode[];\n+\n extern const guint qemu_input_map_qcode_to_adb_len;\n extern const guint16 qemu_input_map_qcode_to_adb[];\n \ndiff --git a/ui/Makefile.objs b/ui/Makefile.objs\nindex 3cd1122ea9..9cf398e5c6 100644\n--- a/ui/Makefile.objs\n+++ b/ui/Makefile.objs\n@@ -55,6 +55,7 @@ KEYCODEMAP_CSV = $(SRC_PATH)/ui/keycodemapdb/data/keymaps.csv\n \n KEYCODEMAP_FILES = \\\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 \t\t ui/input-keymap-qcode-to-atset1.c \\\n \t\t ui/input-keymap-qcode-to-atset2.c \\\ndiff --git a/ui/cocoa.m b/ui/cocoa.m\nindex 93e56d0518..e966605914 100644\n--- a/ui/cocoa.m\n+++ b/ui/cocoa.m\n@@ -106,139 +106,14 @@ bool stretch_video;\n NSTextField *pauseLabel;\n NSArray * supportedImageFileTypes;\n \n-// Mac to QKeyCode conversion\n-const int mac_to_qkeycode_map[] = {\n-    [kVK_ANSI_A] = Q_KEY_CODE_A,\n-    [kVK_ANSI_B] = Q_KEY_CODE_B,\n-    [kVK_ANSI_C] = Q_KEY_CODE_C,\n-    [kVK_ANSI_D] = Q_KEY_CODE_D,\n-    [kVK_ANSI_E] = Q_KEY_CODE_E,\n-    [kVK_ANSI_F] = Q_KEY_CODE_F,\n-    [kVK_ANSI_G] = Q_KEY_CODE_G,\n-    [kVK_ANSI_H] = Q_KEY_CODE_H,\n-    [kVK_ANSI_I] = Q_KEY_CODE_I,\n-    [kVK_ANSI_J] = Q_KEY_CODE_J,\n-    [kVK_ANSI_K] = Q_KEY_CODE_K,\n-    [kVK_ANSI_L] = Q_KEY_CODE_L,\n-    [kVK_ANSI_M] = Q_KEY_CODE_M,\n-    [kVK_ANSI_N] = Q_KEY_CODE_N,\n-    [kVK_ANSI_O] = Q_KEY_CODE_O,\n-    [kVK_ANSI_P] = Q_KEY_CODE_P,\n-    [kVK_ANSI_Q] = Q_KEY_CODE_Q,\n-    [kVK_ANSI_R] = Q_KEY_CODE_R,\n-    [kVK_ANSI_S] = Q_KEY_CODE_S,\n-    [kVK_ANSI_T] = Q_KEY_CODE_T,\n-    [kVK_ANSI_U] = Q_KEY_CODE_U,\n-    [kVK_ANSI_V] = Q_KEY_CODE_V,\n-    [kVK_ANSI_W] = Q_KEY_CODE_W,\n-    [kVK_ANSI_X] = Q_KEY_CODE_X,\n-    [kVK_ANSI_Y] = Q_KEY_CODE_Y,\n-    [kVK_ANSI_Z] = Q_KEY_CODE_Z,\n-\n-    [kVK_ANSI_0] = Q_KEY_CODE_0,\n-    [kVK_ANSI_1] = Q_KEY_CODE_1,\n-    [kVK_ANSI_2] = Q_KEY_CODE_2,\n-    [kVK_ANSI_3] = Q_KEY_CODE_3,\n-    [kVK_ANSI_4] = Q_KEY_CODE_4,\n-    [kVK_ANSI_5] = Q_KEY_CODE_5,\n-    [kVK_ANSI_6] = Q_KEY_CODE_6,\n-    [kVK_ANSI_7] = Q_KEY_CODE_7,\n-    [kVK_ANSI_8] = Q_KEY_CODE_8,\n-    [kVK_ANSI_9] = Q_KEY_CODE_9,\n-\n-    [kVK_ANSI_Grave] = Q_KEY_CODE_GRAVE_ACCENT,\n-    [kVK_ANSI_Minus] = Q_KEY_CODE_MINUS,\n-    [kVK_ANSI_Equal] = Q_KEY_CODE_EQUAL,\n-    [kVK_Delete] = Q_KEY_CODE_BACKSPACE,\n-    [kVK_CapsLock] = Q_KEY_CODE_CAPS_LOCK,\n-    [kVK_Tab] = Q_KEY_CODE_TAB,\n-    [kVK_Return] = Q_KEY_CODE_RET,\n-    [kVK_ANSI_LeftBracket] = Q_KEY_CODE_BRACKET_LEFT,\n-    [kVK_ANSI_RightBracket] = Q_KEY_CODE_BRACKET_RIGHT,\n-    [kVK_ANSI_Backslash] = Q_KEY_CODE_BACKSLASH,\n-    [kVK_ANSI_Semicolon] = Q_KEY_CODE_SEMICOLON,\n-    [kVK_ANSI_Quote] = Q_KEY_CODE_APOSTROPHE,\n-    [kVK_ANSI_Comma] = Q_KEY_CODE_COMMA,\n-    [kVK_ANSI_Period] = Q_KEY_CODE_DOT,\n-    [kVK_ANSI_Slash] = Q_KEY_CODE_SLASH,\n-    [kVK_Shift] = Q_KEY_CODE_SHIFT,\n-    [kVK_RightShift] = Q_KEY_CODE_SHIFT_R,\n-    [kVK_Control] = Q_KEY_CODE_CTRL,\n-    [kVK_RightControl] = Q_KEY_CODE_CTRL_R,\n-    [kVK_Option] = Q_KEY_CODE_ALT,\n-    [kVK_RightOption] = Q_KEY_CODE_ALT_R,\n-    [kVK_Command] = Q_KEY_CODE_META_L,\n-    [0x36] = Q_KEY_CODE_META_R, /* There is no kVK_RightCommand */\n-    [kVK_Space] = Q_KEY_CODE_SPC,\n-\n-    [kVK_ANSI_Keypad0] = Q_KEY_CODE_KP_0,\n-    [kVK_ANSI_Keypad1] = Q_KEY_CODE_KP_1,\n-    [kVK_ANSI_Keypad2] = Q_KEY_CODE_KP_2,\n-    [kVK_ANSI_Keypad3] = Q_KEY_CODE_KP_3,\n-    [kVK_ANSI_Keypad4] = Q_KEY_CODE_KP_4,\n-    [kVK_ANSI_Keypad5] = Q_KEY_CODE_KP_5,\n-    [kVK_ANSI_Keypad6] = Q_KEY_CODE_KP_6,\n-    [kVK_ANSI_Keypad7] = Q_KEY_CODE_KP_7,\n-    [kVK_ANSI_Keypad8] = Q_KEY_CODE_KP_8,\n-    [kVK_ANSI_Keypad9] = Q_KEY_CODE_KP_9,\n-    [kVK_ANSI_KeypadDecimal] = Q_KEY_CODE_KP_DECIMAL,\n-    [kVK_ANSI_KeypadEnter] = Q_KEY_CODE_KP_ENTER,\n-    [kVK_ANSI_KeypadPlus] = Q_KEY_CODE_KP_ADD,\n-    [kVK_ANSI_KeypadMinus] = Q_KEY_CODE_KP_SUBTRACT,\n-    [kVK_ANSI_KeypadMultiply] = Q_KEY_CODE_KP_MULTIPLY,\n-    [kVK_ANSI_KeypadDivide] = Q_KEY_CODE_KP_DIVIDE,\n-    [kVK_ANSI_KeypadEquals] = Q_KEY_CODE_KP_EQUALS,\n-    [kVK_ANSI_KeypadClear] = Q_KEY_CODE_NUM_LOCK,\n-\n-    [kVK_UpArrow] = Q_KEY_CODE_UP,\n-    [kVK_DownArrow] = Q_KEY_CODE_DOWN,\n-    [kVK_LeftArrow] = Q_KEY_CODE_LEFT,\n-    [kVK_RightArrow] = Q_KEY_CODE_RIGHT,\n-\n-    [kVK_Help] = Q_KEY_CODE_INSERT,\n-    [kVK_Home] = Q_KEY_CODE_HOME,\n-    [kVK_PageUp] = Q_KEY_CODE_PGUP,\n-    [kVK_PageDown] = Q_KEY_CODE_PGDN,\n-    [kVK_End] = Q_KEY_CODE_END,\n-    [kVK_ForwardDelete] = Q_KEY_CODE_DELETE,\n-\n-    [kVK_Escape] = Q_KEY_CODE_ESC,\n-\n-    /* The Power key can't be used directly because the operating system uses\n-     * it. This key can be emulated by using it in place of another key such as\n-     * F1. Don't forget to disable the real key binding.\n-     */\n-    /* [kVK_F1] = Q_KEY_CODE_POWER, */\n-\n-    [kVK_F1] = Q_KEY_CODE_F1,\n-    [kVK_F2] = Q_KEY_CODE_F2,\n-    [kVK_F3] = Q_KEY_CODE_F3,\n-    [kVK_F4] = Q_KEY_CODE_F4,\n-    [kVK_F5] = Q_KEY_CODE_F5,\n-    [kVK_F6] = Q_KEY_CODE_F6,\n-    [kVK_F7] = Q_KEY_CODE_F7,\n-    [kVK_F8] = Q_KEY_CODE_F8,\n-    [kVK_F9] = Q_KEY_CODE_F9,\n-    [kVK_F10] = Q_KEY_CODE_F10,\n-    [kVK_F11] = Q_KEY_CODE_F11,\n-    [kVK_F12] = Q_KEY_CODE_F12,\n-    [kVK_F13] = Q_KEY_CODE_PRINT,\n-    [kVK_F14] = Q_KEY_CODE_SCROLL_LOCK,\n-    [kVK_F15] = Q_KEY_CODE_PAUSE,\n-\n-    /*\n-     * The eject and volume keys can't be used here because they are handled at\n-     * a lower level than what an Application can see.\n-     */\n-};\n \n static int cocoa_keycode_to_qemu(int keycode)\n {\n-    if (ARRAY_SIZE(mac_to_qkeycode_map) <= keycode) {\n+    if (keycode >= qemu_input_map_osx_to_qcode_len) {\n         fprintf(stderr, \"(cocoa) warning unknown keycode 0x%x\\n\", keycode);\n         return 0;\n     }\n-    return mac_to_qkeycode_map[keycode];\n+    return qemu_input_map_osx_to_qcode[keycode];\n }\n \n /* Displays an alert dialog box with the specified message */\ndiff --git a/ui/input-keymap-osx-to-qcode.c b/ui/input-keymap-osx-to-qcode.c\nnew file mode 100644\nindex 0000000000..450d22fa6d\n--- /dev/null\n+++ b/ui/input-keymap-osx-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_osx_to_qcode code-map keymaps.csv osx qcode\n+*/\n+const guint16 qemu_input_map_osx_to_qcode[256] = {\n+  [0x0] = Q_KEY_CODE_A, /* osx:0 (ANSI_A) -> linux:30 (KEY_A) -> qcode:Q_KEY_CODE_A (a) */\n+  [0x1] = Q_KEY_CODE_S, /* osx:1 (ANSI_S) -> linux:31 (KEY_S) -> qcode:Q_KEY_CODE_S (s) */\n+  [0x2] = Q_KEY_CODE_D, /* osx:2 (ANSI_D) -> linux:32 (KEY_D) -> qcode:Q_KEY_CODE_D (d) */\n+  [0x3] = Q_KEY_CODE_F, /* osx:3 (ANSI_F) -> linux:33 (KEY_F) -> qcode:Q_KEY_CODE_F (f) */\n+  [0x4] = Q_KEY_CODE_H, /* osx:4 (ANSI_H) -> linux:35 (KEY_H) -> qcode:Q_KEY_CODE_H (h) */\n+  [0x5] = Q_KEY_CODE_G, /* osx:5 (ANSI_G) -> linux:34 (KEY_G) -> qcode:Q_KEY_CODE_G (g) */\n+  [0x6] = Q_KEY_CODE_Z, /* osx:6 (ANSI_Z) -> linux:44 (KEY_Z) -> qcode:Q_KEY_CODE_Z (z) */\n+  [0x7] = Q_KEY_CODE_X, /* osx:7 (ANSI_X) -> linux:45 (KEY_X) -> qcode:Q_KEY_CODE_X (x) */\n+  [0x8] = Q_KEY_CODE_C, /* osx:8 (ANSI_C) -> linux:46 (KEY_C) -> qcode:Q_KEY_CODE_C (c) */\n+  [0x9] = Q_KEY_CODE_V, /* osx:9 (ANSI_V) -> linux:47 (KEY_V) -> qcode:Q_KEY_CODE_V (v) */\n+  [0xa] = Q_KEY_CODE_UNMAPPED, /* osx:10 (ISO_Section) -> linux:170 (KEY_ISO) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+  [0xb] = Q_KEY_CODE_B, /* osx:11 (ANSI_B) -> linux:48 (KEY_B) -> qcode:Q_KEY_CODE_B (b) */\n+  [0xc] = Q_KEY_CODE_Q, /* osx:12 (ANSI_Q) -> linux:16 (KEY_Q) -> qcode:Q_KEY_CODE_Q (q) */\n+  [0xd] = Q_KEY_CODE_W, /* osx:13 (ANSI_W) -> linux:17 (KEY_W) -> qcode:Q_KEY_CODE_W (w) */\n+  [0xe] = Q_KEY_CODE_E, /* osx:14 (ANSI_E) -> linux:18 (KEY_E) -> qcode:Q_KEY_CODE_E (e) */\n+  [0xf] = Q_KEY_CODE_R, /* osx:15 (ANSI_R) -> linux:19 (KEY_R) -> qcode:Q_KEY_CODE_R (r) */\n+  [0x10] = Q_KEY_CODE_Y, /* osx:16 (ANSI_Y) -> linux:21 (KEY_Y) -> qcode:Q_KEY_CODE_Y (y) */\n+  [0x11] = Q_KEY_CODE_T, /* osx:17 (ANSI_T) -> linux:20 (KEY_T) -> qcode:Q_KEY_CODE_T (t) */\n+  [0x12] = Q_KEY_CODE_1, /* osx:18 (ANSI_1) -> linux:2 (KEY_1) -> qcode:Q_KEY_CODE_1 (1) */\n+  [0x13] = Q_KEY_CODE_2, /* osx:19 (ANSI_2) -> linux:3 (KEY_2) -> qcode:Q_KEY_CODE_2 (2) */\n+  [0x14] = Q_KEY_CODE_3, /* osx:20 (ANSI_3) -> linux:4 (KEY_3) -> qcode:Q_KEY_CODE_3 (3) */\n+  [0x15] = Q_KEY_CODE_4, /* osx:21 (ANSI_4) -> linux:5 (KEY_4) -> qcode:Q_KEY_CODE_4 (4) */\n+  [0x16] = Q_KEY_CODE_6, /* osx:22 (ANSI_6) -> linux:7 (KEY_6) -> qcode:Q_KEY_CODE_6 (6) */\n+  [0x17] = Q_KEY_CODE_5, /* osx:23 (ANSI_5) -> linux:6 (KEY_5) -> qcode:Q_KEY_CODE_5 (5) */\n+  [0x18] = Q_KEY_CODE_EQUAL, /* osx:24 (ANSI_Equal) -> linux:13 (KEY_EQUAL) -> qcode:Q_KEY_CODE_EQUAL (equal) */\n+  [0x19] = Q_KEY_CODE_9, /* osx:25 (ANSI_9) -> linux:10 (KEY_9) -> qcode:Q_KEY_CODE_9 (9) */\n+  [0x1a] = Q_KEY_CODE_7, /* osx:26 (ANSI_7) -> linux:8 (KEY_7) -> qcode:Q_KEY_CODE_7 (7) */\n+  [0x1b] = Q_KEY_CODE_MINUS, /* osx:27 (ANSI_Minus) -> linux:12 (KEY_MINUS) -> qcode:Q_KEY_CODE_MINUS (minus) */\n+  [0x1c] = Q_KEY_CODE_8, /* osx:28 (ANSI_8) -> linux:9 (KEY_8) -> qcode:Q_KEY_CODE_8 (8) */\n+  [0x1d] = Q_KEY_CODE_0, /* osx:29 (ANSI_0) -> linux:11 (KEY_0) -> qcode:Q_KEY_CODE_0 (0) */\n+  [0x1e] = Q_KEY_CODE_BRACKET_RIGHT, /* osx:30 (ANSI_RightBracket) -> linux:27 (KEY_RIGHTBRACE) -> qcode:Q_KEY_CODE_BRACKET_RIGHT (bracket_right) */\n+  [0x1f] = Q_KEY_CODE_O, /* osx:31 (ANSI_O) -> linux:24 (KEY_O) -> qcode:Q_KEY_CODE_O (o) */\n+  [0x20] = Q_KEY_CODE_U, /* osx:32 (ANSI_U) -> linux:22 (KEY_U) -> qcode:Q_KEY_CODE_U (u) */\n+  [0x21] = Q_KEY_CODE_BRACKET_LEFT, /* osx:33 (ANSI_LeftBracket) -> linux:26 (KEY_LEFTBRACE) -> qcode:Q_KEY_CODE_BRACKET_LEFT (bracket_left) */\n+  [0x22] = Q_KEY_CODE_I, /* osx:34 (ANSI_I) -> linux:23 (KEY_I) -> qcode:Q_KEY_CODE_I (i) */\n+  [0x23] = Q_KEY_CODE_P, /* osx:35 (ANSI_P) -> linux:25 (KEY_P) -> qcode:Q_KEY_CODE_P (p) */\n+  [0x24] = Q_KEY_CODE_RET, /* osx:36 (Return) -> linux:28 (KEY_ENTER) -> qcode:Q_KEY_CODE_RET (ret) */\n+  [0x25] = Q_KEY_CODE_L, /* osx:37 (ANSI_L) -> linux:38 (KEY_L) -> qcode:Q_KEY_CODE_L (l) */\n+  [0x26] = Q_KEY_CODE_J, /* osx:38 (ANSI_J) -> linux:36 (KEY_J) -> qcode:Q_KEY_CODE_J (j) */\n+  [0x27] = Q_KEY_CODE_APOSTROPHE, /* osx:39 (ANSI_Quote) -> linux:40 (KEY_APOSTROPHE) -> qcode:Q_KEY_CODE_APOSTROPHE (apostrophe) */\n+  [0x28] = Q_KEY_CODE_K, /* osx:40 (ANSI_K) -> linux:37 (KEY_K) -> qcode:Q_KEY_CODE_K (k) */\n+  [0x29] = Q_KEY_CODE_SEMICOLON, /* osx:41 (ANSI_Semicolon) -> linux:39 (KEY_SEMICOLON) -> qcode:Q_KEY_CODE_SEMICOLON (semicolon) */\n+  [0x2a] = Q_KEY_CODE_BACKSLASH, /* osx:42 (ANSI_Backslash) -> linux:43 (KEY_BACKSLASH) -> qcode:Q_KEY_CODE_BACKSLASH (backslash) */\n+  [0x2b] = Q_KEY_CODE_COMMA, /* osx:43 (ANSI_Comma) -> linux:51 (KEY_COMMA) -> qcode:Q_KEY_CODE_COMMA (comma) */\n+  [0x2c] = Q_KEY_CODE_SLASH, /* osx:44 (ANSI_Slash) -> linux:53 (KEY_SLASH) -> qcode:Q_KEY_CODE_SLASH (slash) */\n+  [0x2d] = Q_KEY_CODE_N, /* osx:45 (ANSI_N) -> linux:49 (KEY_N) -> qcode:Q_KEY_CODE_N (n) */\n+  [0x2e] = Q_KEY_CODE_M, /* osx:46 (ANSI_M) -> linux:50 (KEY_M) -> qcode:Q_KEY_CODE_M (m) */\n+  [0x2f] = Q_KEY_CODE_DOT, /* osx:47 (ANSI_Period) -> linux:52 (KEY_DOT) -> qcode:Q_KEY_CODE_DOT (dot) */\n+  [0x30] = Q_KEY_CODE_TAB, /* osx:48 (Tab) -> linux:15 (KEY_TAB) -> qcode:Q_KEY_CODE_TAB (tab) */\n+  [0x31] = Q_KEY_CODE_SPC, /* osx:49 (Space) -> linux:57 (KEY_SPACE) -> qcode:Q_KEY_CODE_SPC (spc) */\n+  [0x32] = Q_KEY_CODE_GRAVE_ACCENT, /* osx:50 (ANSI_Grave) -> linux:41 (KEY_GRAVE) -> qcode:Q_KEY_CODE_GRAVE_ACCENT (grave_accent) */\n+  [0x33] = Q_KEY_CODE_BACKSPACE, /* osx:51 (Delete) -> linux:14 (KEY_BACKSPACE) -> qcode:Q_KEY_CODE_BACKSPACE (backspace) */\n+  [0x35] = Q_KEY_CODE_ESC, /* osx:53 (Escape) -> linux:1 (KEY_ESC) -> qcode:Q_KEY_CODE_ESC (esc) */\n+  [0x36] = Q_KEY_CODE_META_R, /* osx:54 (RightCommand) -> linux:126 (KEY_RIGHTMETA) -> qcode:Q_KEY_CODE_META_R (meta_r) */\n+  [0x37] = Q_KEY_CODE_META_L, /* osx:55 (Command) -> linux:125 (KEY_LEFTMETA) -> qcode:Q_KEY_CODE_META_L (meta_l) */\n+  [0x38] = Q_KEY_CODE_SHIFT, /* osx:56 (Shift) -> linux:42 (KEY_LEFTSHIFT) -> qcode:Q_KEY_CODE_SHIFT (shift) */\n+  [0x39] = Q_KEY_CODE_CAPS_LOCK, /* osx:57 (CapsLock) -> linux:58 (KEY_CAPSLOCK) -> qcode:Q_KEY_CODE_CAPS_LOCK (caps_lock) */\n+  [0x3a] = Q_KEY_CODE_ALT, /* osx:58 (Option) -> linux:56 (KEY_LEFTALT) -> qcode:Q_KEY_CODE_ALT (alt) */\n+  [0x3b] = Q_KEY_CODE_CTRL, /* osx:59 (Control) -> linux:29 (KEY_LEFTCTRL) -> qcode:Q_KEY_CODE_CTRL (ctrl) */\n+  [0x3c] = Q_KEY_CODE_SHIFT_R, /* osx:60 (RightShift) -> linux:54 (KEY_RIGHTSHIFT) -> qcode:Q_KEY_CODE_SHIFT_R (shift_r) */\n+  [0x3d] = Q_KEY_CODE_ALT_R, /* osx:61 (RightOption) -> linux:100 (KEY_RIGHTALT) -> qcode:Q_KEY_CODE_ALT_R (alt_r) */\n+  [0x3e] = Q_KEY_CODE_CTRL_R, /* osx:62 (RightControl) -> linux:97 (KEY_RIGHTCTRL) -> qcode:Q_KEY_CODE_CTRL_R (ctrl_r) */\n+  [0x3f] = Q_KEY_CODE_UNMAPPED, /* osx:63 (Function) -> linux:464 (KEY_FN) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+  [0x40] = Q_KEY_CODE_UNMAPPED, /* osx:64 (F17) -> linux:187 (KEY_F17) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+  [0x41] = Q_KEY_CODE_KP_DECIMAL, /* osx:65 (ANSI_KeypadDecimal) -> linux:83 (KEY_KPDOT) -> qcode:Q_KEY_CODE_KP_DECIMAL (kp_decimal) */\n+  [0x43] = Q_KEY_CODE_KP_MULTIPLY, /* osx:67 (ANSI_KeypadMultiply) -> linux:55 (KEY_KPASTERISK) -> qcode:Q_KEY_CODE_KP_MULTIPLY (kp_multiply) */\n+  [0x45] = Q_KEY_CODE_KP_ADD, /* osx:69 (ANSI_KeypadPlus) -> linux:78 (KEY_KPPLUS) -> qcode:Q_KEY_CODE_KP_ADD (kp_add) */\n+  [0x47] = Q_KEY_CODE_NUM_LOCK, /* osx:71 (ANSI_KeypadClear) -> linux:69 (KEY_NUMLOCK) -> qcode:Q_KEY_CODE_NUM_LOCK (num_lock) */\n+  [0x48] = Q_KEY_CODE_VOLUMEUP, /* osx:72 (VolumeUp) -> linux:115 (KEY_VOLUMEUP) -> qcode:Q_KEY_CODE_VOLUMEUP (volumeup) */\n+  [0x49] = Q_KEY_CODE_VOLUMEDOWN, /* osx:73 (VolumeDown) -> linux:114 (KEY_VOLUMEDOWN) -> qcode:Q_KEY_CODE_VOLUMEDOWN (volumedown) */\n+  [0x4a] = Q_KEY_CODE_AUDIOMUTE, /* osx:74 (Mute) -> linux:113 (KEY_MUTE) -> qcode:Q_KEY_CODE_AUDIOMUTE (audiomute) */\n+  [0x4b] = Q_KEY_CODE_KP_DIVIDE, /* osx:75 (ANSI_KeypadDivide) -> linux:98 (KEY_KPSLASH) -> qcode:Q_KEY_CODE_KP_DIVIDE (kp_divide) */\n+  [0x4c] = Q_KEY_CODE_KP_ENTER, /* osx:76 (ANSI_KeypadEnter) -> linux:96 (KEY_KPENTER) -> qcode:Q_KEY_CODE_KP_ENTER (kp_enter) */\n+  [0x4e] = Q_KEY_CODE_KP_SUBTRACT, /* osx:78 (ANSI_KeypadMinus) -> linux:74 (KEY_KPMINUS) -> qcode:Q_KEY_CODE_KP_SUBTRACT (kp_subtract) */\n+  [0x4f] = Q_KEY_CODE_UNMAPPED, /* osx:79 (F18) -> linux:188 (KEY_F18) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+  [0x50] = Q_KEY_CODE_UNMAPPED, /* osx:80 (F19) -> linux:189 (KEY_F19) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+  [0x51] = Q_KEY_CODE_KP_EQUALS, /* osx:81 (ANSI_KeypadEquals) -> linux:117 (KEY_KPEQUAL) -> qcode:Q_KEY_CODE_KP_EQUALS (kp_equals) */\n+  [0x52] = Q_KEY_CODE_KP_0, /* osx:82 (ANSI_Keypad0) -> linux:82 (KEY_KP0) -> qcode:Q_KEY_CODE_KP_0 (kp_0) */\n+  [0x53] = Q_KEY_CODE_KP_1, /* osx:83 (ANSI_Keypad1) -> linux:79 (KEY_KP1) -> qcode:Q_KEY_CODE_KP_1 (kp_1) */\n+  [0x54] = Q_KEY_CODE_KP_2, /* osx:84 (ANSI_Keypad2) -> linux:80 (KEY_KP2) -> qcode:Q_KEY_CODE_KP_2 (kp_2) */\n+  [0x55] = Q_KEY_CODE_KP_3, /* osx:85 (ANSI_Keypad3) -> linux:81 (KEY_KP3) -> qcode:Q_KEY_CODE_KP_3 (kp_3) */\n+  [0x56] = Q_KEY_CODE_KP_4, /* osx:86 (ANSI_Keypad4) -> linux:75 (KEY_KP4) -> qcode:Q_KEY_CODE_KP_4 (kp_4) */\n+  [0x57] = Q_KEY_CODE_KP_5, /* osx:87 (ANSI_Keypad5) -> linux:76 (KEY_KP5) -> qcode:Q_KEY_CODE_KP_5 (kp_5) */\n+  [0x58] = Q_KEY_CODE_KP_6, /* osx:88 (ANSI_Keypad6) -> linux:77 (KEY_KP6) -> qcode:Q_KEY_CODE_KP_6 (kp_6) */\n+  [0x59] = Q_KEY_CODE_KP_7, /* osx:89 (ANSI_Keypad7) -> linux:71 (KEY_KP7) -> qcode:Q_KEY_CODE_KP_7 (kp_7) */\n+  [0x5a] = Q_KEY_CODE_UNMAPPED, /* osx:90 (F20) -> linux:190 (KEY_F20) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+  [0x5b] = Q_KEY_CODE_KP_8, /* osx:91 (ANSI_Keypad8) -> linux:72 (KEY_KP8) -> qcode:Q_KEY_CODE_KP_8 (kp_8) */\n+  [0x5c] = Q_KEY_CODE_KP_9, /* osx:92 (ANSI_Keypad9) -> linux:73 (KEY_KP9) -> qcode:Q_KEY_CODE_KP_9 (kp_9) */\n+  [0x5d] = Q_KEY_CODE_YEN, /* osx:93 (JIS_Yen) -> linux:124 (KEY_YEN) -> qcode:Q_KEY_CODE_YEN (yen) */\n+  [0x5f] = Q_KEY_CODE_UNMAPPED, /* osx:95 (JIS_KeypadComma) -> linux:95 (KEY_KPJPCOMMA) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+  [0x60] = Q_KEY_CODE_F5, /* osx:96 (F5) -> linux:63 (KEY_F5) -> qcode:Q_KEY_CODE_F5 (f5) */\n+  [0x61] = Q_KEY_CODE_F6, /* osx:97 (F6) -> linux:64 (KEY_F6) -> qcode:Q_KEY_CODE_F6 (f6) */\n+  [0x62] = Q_KEY_CODE_F7, /* osx:98 (F7) -> linux:65 (KEY_F7) -> qcode:Q_KEY_CODE_F7 (f7) */\n+  [0x63] = Q_KEY_CODE_F3, /* osx:99 (F3) -> linux:61 (KEY_F3) -> qcode:Q_KEY_CODE_F3 (f3) */\n+  [0x64] = Q_KEY_CODE_F8, /* osx:100 (F8) -> linux:66 (KEY_F8) -> qcode:Q_KEY_CODE_F8 (f8) */\n+  [0x65] = Q_KEY_CODE_F9, /* osx:101 (F9) -> linux:67 (KEY_F9) -> qcode:Q_KEY_CODE_F9 (f9) */\n+  [0x67] = Q_KEY_CODE_F11, /* osx:103 (F11) -> linux:87 (KEY_F11) -> qcode:Q_KEY_CODE_F11 (f11) */\n+  [0x68] = Q_KEY_CODE_UNMAPPED, /* osx:104 (JIS_Kana) -> linux:90 (KEY_KATAKANA) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+  [0x69] = Q_KEY_CODE_UNMAPPED, /* osx:105 (F13) -> linux:183 (KEY_F13) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+  [0x6a] = Q_KEY_CODE_UNMAPPED, /* osx:106 (F16) -> linux:186 (KEY_F16) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+  [0x6b] = Q_KEY_CODE_UNMAPPED, /* osx:107 (F14) -> linux:184 (KEY_F14) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+  [0x6d] = Q_KEY_CODE_F10, /* osx:109 (F10) -> linux:68 (KEY_F10) -> qcode:Q_KEY_CODE_F10 (f10) */\n+  [0x6e] = Q_KEY_CODE_COMPOSE, /* osx:110 (unnamed) -> linux:127 (KEY_COMPOSE) -> qcode:Q_KEY_CODE_COMPOSE (compose) */\n+  [0x6f] = Q_KEY_CODE_F12, /* osx:111 (F12) -> linux:88 (KEY_F12) -> qcode:Q_KEY_CODE_F12 (f12) */\n+  [0x71] = Q_KEY_CODE_UNMAPPED, /* osx:113 (F15) -> linux:185 (KEY_F15) -> qcode:Q_KEY_CODE_UNMAPPED (unnamed) */\n+  [0x72] = Q_KEY_CODE_HELP, /* osx:114 (Help) -> linux:138 (KEY_HELP) -> qcode:Q_KEY_CODE_HELP (help) */\n+  [0x73] = Q_KEY_CODE_HOME, /* osx:115 (Home) -> linux:102 (KEY_HOME) -> qcode:Q_KEY_CODE_HOME (home) */\n+  [0x74] = Q_KEY_CODE_PGUP, /* osx:116 (PageUp) -> linux:104 (KEY_PAGEUP) -> qcode:Q_KEY_CODE_PGUP (pgup) */\n+  [0x75] = Q_KEY_CODE_DELETE, /* osx:117 (ForwardDelete) -> linux:111 (KEY_DELETE) -> qcode:Q_KEY_CODE_DELETE (delete) */\n+  [0x76] = Q_KEY_CODE_F4, /* osx:118 (F4) -> linux:62 (KEY_F4) -> qcode:Q_KEY_CODE_F4 (f4) */\n+  [0x77] = Q_KEY_CODE_END, /* osx:119 (End) -> linux:107 (KEY_END) -> qcode:Q_KEY_CODE_END (end) */\n+  [0x78] = Q_KEY_CODE_F2, /* osx:120 (F2) -> linux:60 (KEY_F2) -> qcode:Q_KEY_CODE_F2 (f2) */\n+  [0x79] = Q_KEY_CODE_PGDN, /* osx:121 (PageDown) -> linux:109 (KEY_PAGEDOWN) -> qcode:Q_KEY_CODE_PGDN (pgdn) */\n+  [0x7a] = Q_KEY_CODE_F1, /* osx:122 (F1) -> linux:59 (KEY_F1) -> qcode:Q_KEY_CODE_F1 (f1) */\n+  [0x7b] = Q_KEY_CODE_LEFT, /* osx:123 (LeftArrow) -> linux:105 (KEY_LEFT) -> qcode:Q_KEY_CODE_LEFT (left) */\n+  [0x7c] = Q_KEY_CODE_RIGHT, /* osx:124 (RightArrow) -> linux:106 (KEY_RIGHT) -> qcode:Q_KEY_CODE_RIGHT (right) */\n+  [0x7d] = Q_KEY_CODE_DOWN, /* osx:125 (DownArrow) -> linux:108 (KEY_DOWN) -> qcode:Q_KEY_CODE_DOWN (down) */\n+  [0x7e] = Q_KEY_CODE_UP, /* osx:126 (UpArrow) -> linux:103 (KEY_UP) -> qcode:Q_KEY_CODE_UP (up) */\n+  [0xff] = Q_KEY_CODE_UNMAPPED, /* osx:255 (unnamed) -> linux:0 (KEY_RESERVED) -> qcode:Q_KEY_CODE_UNMAPPED (unmapped) */\n+};\n+const guint qemu_input_map_osx_to_qcode_len = sizeof(qemu_input_map_osx_to_qcode)/sizeof(qemu_input_map_osx_to_qcode[0]);\ndiff --git a/ui/input-keymap.c b/ui/input-keymap.c\nindex 1b53cb4d0a..de11205dca 100644\n--- a/ui/input-keymap.c\n+++ b/ui/input-keymap.c\n@@ -6,6 +6,7 @@\n #include \"standard-headers/linux/input.h\"\n \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 #include \"ui/input-keymap-qcode-to-atset1.c\"\n #include \"ui/input-keymap-qcode-to-atset2.c\"\n",
    "prefixes": [
        "v5",
        "09/12"
    ]
}