From nobody Sun Jun 7 22:23:12 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=reject dis=none) header.from=rsg.ci.i.u-tokyo.ac.jp Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780555450366343.5527891833974; Wed, 3 Jun 2026 23:44:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wV1ng-0006XH-Dz; Thu, 04 Jun 2026 02:43:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wV1ne-0006X8-0l for qemu-devel@nongnu.org; Thu, 04 Jun 2026 02:43:30 -0400 Received: from www3579.sakura.ne.jp ([49.212.243.89]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wV1na-0007JG-Ji for qemu-devel@nongnu.org; Thu, 04 Jun 2026 02:43:29 -0400 Received: from h183.csg.ci.i.u-tokyo.ac.jp (h183.csg.ci.i.u-tokyo.ac.jp [133.11.54.183]) (authenticated bits=0) by www3579.sakura.ne.jp (8.16.1/8.16.1) with ESMTPSA id 6546h03f047185 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Thu, 4 Jun 2026 15:43:12 +0900 (JST) (envelope-from odaki@rsg.ci.i.u-tokyo.ac.jp) DKIM-Signature: a=rsa-sha256; bh=nMQzw+CgMK7MS3MPiZFgTDFS2ZlLnoQarKQ/wPen1/A=; c=relaxed/relaxed; d=rsg.ci.i.u-tokyo.ac.jp; h=From:Message-Id:To:Subject:Date; s=rs20250326; t=1780555392; v=1; b=NYqXTdTnT27bmNWJVMijUaihghhgnO3lM3H9L4uY5MwV6ZcZU0cxo6kL60QY7HL1 /CEY2xXYv39H5s9q2HHaWa2k5giZPjrEMy9QLMnizH9fPzqt74XGKpqvaBn7bI99 Uct7lmGpugptNRYVIWQSrIaiUD1ifksrX55v23BXefFyq3jJOityEzWK56hEdbZS HxrAVfFsNzaWvFN+qPAHnmZpRQxNRUCWiX55cxjyhx6JEw6CRJy2D8lgUr36cF0z 3yXaN3ocNctmOac4fY074zbxLofRNkSJQ9+Kf6PuaG+dmmRDcqAoROlElGSyhdsf EwioCCDIvTQ06gUf4hq6iQ== From: Akihiko Odaki Date: Thu, 04 Jun 2026 15:39:32 +0900 Subject: [PATCH v3] ui/cocoa: Use qemu_input_map_osx_to_linux MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260604-osx-v3-1-453b4ee0e072@rsg.ci.i.u-tokyo.ac.jp> X-B4-Tracking: v=1; b=H4sIAAAAAAAC/zWMSw4CIRAFrzLptRgaJI6uvIeZBfJxeiEYMITJh LuLJC7r5VXtkF0il+E67ZBcoUwxdJCHCcyqw9Mxsp1BcKE4IrKYK+M4S2e8Esg99Oc7OU91VO5 L55XyJ6ZtRIv4rX9fDb8Ihkwb+ZCzvSCeTzert0D1aOILltbaF4h2YlCXAAAA X-Change-ID: 20250111-osx-0183ecf5210f To: Gerd Hoffmann , Peter Maydell , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Cc: qemu-devel@nongnu.org, Akihiko Odaki X-Mailer: b4 0.16-dev-16047 X-Developer-Signature: v=1; a=openpgp-sha256; l=6819; i=odaki@rsg.ci.i.u-tokyo.ac.jp; h=from:subject:message-id; bh=QKyBFJQFMyW9TtSZpljtNTCytut5HjQMPY8SgHuVDWg=; b=owGbwMvMwCWmMbc20y1CyJDxtFoSQ5aiXN2H4t2KTcJrTy8V0AnyOJQRGZJYySpVI1oZanpoa fzMwyUdpSwMYlwMsmKKLClFu7k1oms/FSbEt8DMYWUCGcLAxSkAExE7xPA/5oNp37RewUf+D6Yf u9ex71517/E/q199z3Kd2Xzn0NSjQgz/zF+Hu5/Rib4QHrrq+OkC95rtjeLyr/wPn7qbk3LiRdo LDgA= X-Developer-Key: i=odaki@rsg.ci.i.u-tokyo.ac.jp; a=openpgp; fpr=AEDC03C9AF734F2EC26A7BFFA4BAEAA73536753C Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=49.212.243.89; envelope-from=odaki@rsg.ci.i.u-tokyo.ac.jp; helo=www3579.sakura.ne.jp X-Spam_score_int: -16 X-Spam_score: -1.7 X-Spam_bar: - X-Spam_report: (-1.7 / 5.0 requ) BAYES_00=-1.9, DKIM_INVALID=0.1, DKIM_SIGNED=0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZM-MESSAGEID: 1780555456036154100 ui/cocoa used to have a conversion table from macOS keycode to Linux key code. It is an unnecessary redundancy as ui/input-keymap.c already has such a table. Worse, I added an incorrect mapping of kVK_JIS_Eisu and kVK_JIS_Kana with commit 708b72557ff5 ("ui/cocoa: Support unique keys of JIS keyboards"). According to the following documentations, the definitions in ui/keycodemapdb/keymaps.csv, which ui/input-keymap.c uses, are correct: https://developer.apple.com/documentation/uikit/uikeyboardhidusage/uikeyboa= rdhidusagekeyboardlang1?language=3Dobjc https://developer.apple.com/documentation/uikit/uikeyboardhidusage/uikeyboa= rdhidusagekeyboardlang2?language=3Dobjc https://docs.microsoft.com/en-us/windows-hardware/design/component-guidelin= es/keyboard-japan-ime Use qemu_input_map_osx_to_linux to eliminate the redundancy and incorrect mappings. Fixes: 708b72557ff5 ("ui/cocoa: Support unique keys of JIS keyboards") Signed-off-by: Akihiko Odaki Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- ui/cocoa used to have a conversion table from macOS keycode to Linux key code. It is an unnecessary redundancy as ui/input-keymap.c already has such a table. Worse, I added an incorrect mapping of kVK_JIS_Eisu and kVK_JIS_Kana with commit 708b72557ff5 ("ui/cocoa: Support unique keys of JIS keyboards"). According to the following documentations, the definitions in ui/keycodemapdb/keymaps.csv, which ui/input-keymap.c uses, are correct: https://developer.apple.com/documentation/uikit/uikeyboardhidusage/uikeyboa= rdhidusagekeyboardlang1?language=3Dobjc https://developer.apple.com/documentation/uikit/uikeyboardhidusage/uikeyboa= rdhidusagekeyboardlang2?language=3Dobjc https://docs.microsoft.com/en-us/windows-hardware/design/component-guidelin= es/keyboard-japan-ime Use qemu_input_map_osx_to_linux to eliminate the redundancy and incorrect mappings. --- Changes in v3: - Rebased. - Link to v2: https://lore.kernel.org/r/20250115-osx-v2-1-ac3b38d91174@dayn= ix.com --- ui/cocoa.m | 131 ++-------------------------------------------------------= ---- 1 file changed, 3 insertions(+), 128 deletions(-) diff --git a/ui/cocoa.m b/ui/cocoa.m index c5e639ab98d6..e157ad01d851 100644 --- a/ui/cocoa.m +++ b/ui/cocoa.m @@ -141,138 +141,13 @@ static bool bool_with_bql(BoolCodeBlock block) return val; } =20 -// Mac to Linux conversion -static const unsigned int mac_to_linux_map[] =3D { - [kVK_ANSI_A] =3D KEY_A, - [kVK_ANSI_B] =3D KEY_B, - [kVK_ANSI_C] =3D KEY_C, - [kVK_ANSI_D] =3D KEY_D, - [kVK_ANSI_E] =3D KEY_E, - [kVK_ANSI_F] =3D KEY_F, - [kVK_ANSI_G] =3D KEY_G, - [kVK_ANSI_H] =3D KEY_H, - [kVK_ANSI_I] =3D KEY_I, - [kVK_ANSI_J] =3D KEY_J, - [kVK_ANSI_K] =3D KEY_K, - [kVK_ANSI_L] =3D KEY_L, - [kVK_ANSI_M] =3D KEY_M, - [kVK_ANSI_N] =3D KEY_N, - [kVK_ANSI_O] =3D KEY_O, - [kVK_ANSI_P] =3D KEY_P, - [kVK_ANSI_Q] =3D KEY_Q, - [kVK_ANSI_R] =3D KEY_R, - [kVK_ANSI_S] =3D KEY_S, - [kVK_ANSI_T] =3D KEY_T, - [kVK_ANSI_U] =3D KEY_U, - [kVK_ANSI_V] =3D KEY_V, - [kVK_ANSI_W] =3D KEY_W, - [kVK_ANSI_X] =3D KEY_X, - [kVK_ANSI_Y] =3D KEY_Y, - [kVK_ANSI_Z] =3D KEY_Z, - - [kVK_ANSI_0] =3D KEY_0, - [kVK_ANSI_1] =3D KEY_1, - [kVK_ANSI_2] =3D KEY_2, - [kVK_ANSI_3] =3D KEY_3, - [kVK_ANSI_4] =3D KEY_4, - [kVK_ANSI_5] =3D KEY_5, - [kVK_ANSI_6] =3D KEY_6, - [kVK_ANSI_7] =3D KEY_7, - [kVK_ANSI_8] =3D KEY_8, - [kVK_ANSI_9] =3D KEY_9, - - [kVK_ANSI_Grave] =3D KEY_GRAVE, - [kVK_ANSI_Minus] =3D KEY_MINUS, - [kVK_ANSI_Equal] =3D KEY_EQUAL, - [kVK_Delete] =3D KEY_BACKSPACE, - [kVK_CapsLock] =3D KEY_CAPSLOCK, - [kVK_Tab] =3D KEY_TAB, - [kVK_Return] =3D KEY_ENTER, - [kVK_ANSI_LeftBracket] =3D KEY_LEFTBRACE, - [kVK_ANSI_RightBracket] =3D KEY_RIGHTBRACE, - [kVK_ANSI_Backslash] =3D KEY_BACKSLASH, - [kVK_ANSI_Semicolon] =3D KEY_SEMICOLON, - [kVK_ANSI_Quote] =3D KEY_APOSTROPHE, - [kVK_ANSI_Comma] =3D KEY_COMMA, - [kVK_ANSI_Period] =3D KEY_DOT, - [kVK_ANSI_Slash] =3D KEY_SLASH, - [kVK_Space] =3D KEY_SPACE, - - [kVK_ANSI_Keypad0] =3D KEY_KP0, - [kVK_ANSI_Keypad1] =3D KEY_KP1, - [kVK_ANSI_Keypad2] =3D KEY_KP2, - [kVK_ANSI_Keypad3] =3D KEY_KP3, - [kVK_ANSI_Keypad4] =3D KEY_KP4, - [kVK_ANSI_Keypad5] =3D KEY_KP5, - [kVK_ANSI_Keypad6] =3D KEY_KP6, - [kVK_ANSI_Keypad7] =3D KEY_KP7, - [kVK_ANSI_Keypad8] =3D KEY_KP8, - [kVK_ANSI_Keypad9] =3D KEY_KP9, - [kVK_ANSI_KeypadDecimal] =3D KEY_KPDOT, - [kVK_ANSI_KeypadEnter] =3D KEY_KPENTER, - [kVK_ANSI_KeypadPlus] =3D KEY_KPPLUS, - [kVK_ANSI_KeypadMinus] =3D KEY_KPMINUS, - [kVK_ANSI_KeypadMultiply] =3D KEY_KPASTERISK, - [kVK_ANSI_KeypadDivide] =3D KEY_KPSLASH, - [kVK_ANSI_KeypadEquals] =3D KEY_KPEQUAL, - [kVK_ANSI_KeypadClear] =3D KEY_NUMLOCK, - - [kVK_UpArrow] =3D KEY_UP, - [kVK_DownArrow] =3D KEY_DOWN, - [kVK_LeftArrow] =3D KEY_LEFT, - [kVK_RightArrow] =3D KEY_RIGHT, - - [kVK_Help] =3D KEY_INSERT, - [kVK_Home] =3D KEY_HOME, - [kVK_PageUp] =3D KEY_PAGEUP, - [kVK_PageDown] =3D KEY_PAGEDOWN, - [kVK_End] =3D KEY_END, - [kVK_ForwardDelete] =3D KEY_DELETE, - - [kVK_Escape] =3D KEY_ESC, - - /* The Power key can't be used directly because the operating system u= ses - * it. This key can be emulated by using it in place of another key su= ch as - * F1. Don't forget to disable the real key binding. - */ - /* [kVK_F1] =3D KEY_POWER, */ - - [kVK_F1] =3D KEY_F1, - [kVK_F2] =3D KEY_F2, - [kVK_F3] =3D KEY_F3, - [kVK_F4] =3D KEY_F4, - [kVK_F5] =3D KEY_F5, - [kVK_F6] =3D KEY_F6, - [kVK_F7] =3D KEY_F7, - [kVK_F8] =3D KEY_F8, - [kVK_F9] =3D KEY_F9, - [kVK_F10] =3D KEY_F10, - [kVK_F11] =3D KEY_F11, - [kVK_F12] =3D KEY_F12, - [kVK_F13] =3D KEY_SYSRQ, - [kVK_F14] =3D KEY_SCROLLLOCK, - [kVK_F15] =3D KEY_PAUSE, - - // JIS keyboards only - [kVK_JIS_Yen] =3D KEY_YEN, - [kVK_JIS_Underscore] =3D KEY_RO, - [kVK_JIS_KeypadComma] =3D KEY_KPCOMMA, - [kVK_JIS_Eisu] =3D KEY_MUHENKAN, - [kVK_JIS_Kana] =3D KEY_HENKAN, - - /* - * The eject and volume keys can't be used here because they are handl= ed at - * a lower level than what an Application can see. - */ -}; - -static unsigned int cocoa_keycode_to_linux(int keycode) +static int cocoa_keycode_to_linux(int keycode) { - if (ARRAY_SIZE(mac_to_linux_map) <=3D keycode) { + if (qemu_input_map_osx_to_linux_len <=3D keycode) { error_report("(cocoa) warning unknown keycode 0x%x", keycode); return 0; } - return mac_to_linux_map[keycode]; + return qemu_input_map_osx_to_linux[keycode]; } =20 /* Displays an alert dialog box with the specified message */ --- base-commit: 2db91528542672cf0db78b3f2cc0e22b36302b38 change-id: 20250111-osx-0183ecf5210f Best regards, -- =20 Akihiko Odaki