@samitouri / QOSamiQemu / commits / 7d9f051410

ui/cocoa: Use qemu_input_map_osx_to_linux

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/uikeyboardhidusagekeyboardlang1?language=objc https://developer.apple.com/documentation/uikit/uikeyboardhidusage/uikeyboardhidusagekeyboardlang2?language=objc https://docs.microsoft.com/en-us/windows-hardware/design/component-guidelines/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 <odaki@rsg.ci.i.u-tokyo.ac.jp> Reviewed-by: Philippe Mathieu-Daudé <philmd@mailo.com> Message-ID: <20260604-osx-v3-1-453b4ee0e072@rsg.ci.i.u-tokyo.ac.jp> Signed-off-by: Philippe Mathieu-Daudé <philmd@oss.qualcomm.com>

Akihiko Odaki committed Jun 4, 2026 at 15:39 UTC 7d9f051410618f97aa3bb55e343a0a7e11aa2973
1 file changed +3 -128
ui/cocoa.m
+3 -128
@@ -141,138 +141,13 @@ static bool bool_with_bql(BoolCodeBlock block)
141 return val;
142 }
143
144 -// Mac to Linux conversion
145 -static const unsigned int mac_to_linux_map[] = {
146 - [kVK_ANSI_A] = KEY_A,
147 - [kVK_ANSI_B] = KEY_B,
148 - [kVK_ANSI_C] = KEY_C,
149 - [kVK_ANSI_D] = KEY_D,
150 - [kVK_ANSI_E] = KEY_E,
151 - [kVK_ANSI_F] = KEY_F,
152 - [kVK_ANSI_G] = KEY_G,
153 - [kVK_ANSI_H] = KEY_H,
154 - [kVK_ANSI_I] = KEY_I,
155 - [kVK_ANSI_J] = KEY_J,
156 - [kVK_ANSI_K] = KEY_K,
157 - [kVK_ANSI_L] = KEY_L,
158 - [kVK_ANSI_M] = KEY_M,
159 - [kVK_ANSI_N] = KEY_N,
160 - [kVK_ANSI_O] = KEY_O,
161 - [kVK_ANSI_P] = KEY_P,
162 - [kVK_ANSI_Q] = KEY_Q,
163 - [kVK_ANSI_R] = KEY_R,
164 - [kVK_ANSI_S] = KEY_S,
165 - [kVK_ANSI_T] = KEY_T,
166 - [kVK_ANSI_U] = KEY_U,
167 - [kVK_ANSI_V] = KEY_V,
168 - [kVK_ANSI_W] = KEY_W,
169 - [kVK_ANSI_X] = KEY_X,
170 - [kVK_ANSI_Y] = KEY_Y,
171 - [kVK_ANSI_Z] = KEY_Z,
172 -
173 - [kVK_ANSI_0] = KEY_0,
174 - [kVK_ANSI_1] = KEY_1,
175 - [kVK_ANSI_2] = KEY_2,
176 - [kVK_ANSI_3] = KEY_3,
177 - [kVK_ANSI_4] = KEY_4,
178 - [kVK_ANSI_5] = KEY_5,
179 - [kVK_ANSI_6] = KEY_6,
180 - [kVK_ANSI_7] = KEY_7,
181 - [kVK_ANSI_8] = KEY_8,
182 - [kVK_ANSI_9] = KEY_9,
183 -
184 - [kVK_ANSI_Grave] = KEY_GRAVE,
185 - [kVK_ANSI_Minus] = KEY_MINUS,
186 - [kVK_ANSI_Equal] = KEY_EQUAL,
187 - [kVK_Delete] = KEY_BACKSPACE,
188 - [kVK_CapsLock] = KEY_CAPSLOCK,
189 - [kVK_Tab] = KEY_TAB,
190 - [kVK_Return] = KEY_ENTER,
191 - [kVK_ANSI_LeftBracket] = KEY_LEFTBRACE,
192 - [kVK_ANSI_RightBracket] = KEY_RIGHTBRACE,
193 - [kVK_ANSI_Backslash] = KEY_BACKSLASH,
194 - [kVK_ANSI_Semicolon] = KEY_SEMICOLON,
195 - [kVK_ANSI_Quote] = KEY_APOSTROPHE,
196 - [kVK_ANSI_Comma] = KEY_COMMA,
197 - [kVK_ANSI_Period] = KEY_DOT,
198 - [kVK_ANSI_Slash] = KEY_SLASH,
199 - [kVK_Space] = KEY_SPACE,
200 -
201 - [kVK_ANSI_Keypad0] = KEY_KP0,
202 - [kVK_ANSI_Keypad1] = KEY_KP1,
203 - [kVK_ANSI_Keypad2] = KEY_KP2,
204 - [kVK_ANSI_Keypad3] = KEY_KP3,
205 - [kVK_ANSI_Keypad4] = KEY_KP4,
206 - [kVK_ANSI_Keypad5] = KEY_KP5,
207 - [kVK_ANSI_Keypad6] = KEY_KP6,
208 - [kVK_ANSI_Keypad7] = KEY_KP7,
209 - [kVK_ANSI_Keypad8] = KEY_KP8,
210 - [kVK_ANSI_Keypad9] = KEY_KP9,
211 - [kVK_ANSI_KeypadDecimal] = KEY_KPDOT,
212 - [kVK_ANSI_KeypadEnter] = KEY_KPENTER,
213 - [kVK_ANSI_KeypadPlus] = KEY_KPPLUS,
214 - [kVK_ANSI_KeypadMinus] = KEY_KPMINUS,
215 - [kVK_ANSI_KeypadMultiply] = KEY_KPASTERISK,
216 - [kVK_ANSI_KeypadDivide] = KEY_KPSLASH,
217 - [kVK_ANSI_KeypadEquals] = KEY_KPEQUAL,
218 - [kVK_ANSI_KeypadClear] = KEY_NUMLOCK,
219 -
220 - [kVK_UpArrow] = KEY_UP,
221 - [kVK_DownArrow] = KEY_DOWN,
222 - [kVK_LeftArrow] = KEY_LEFT,
223 - [kVK_RightArrow] = KEY_RIGHT,
224 -
225 - [kVK_Help] = KEY_INSERT,
226 - [kVK_Home] = KEY_HOME,
227 - [kVK_PageUp] = KEY_PAGEUP,
228 - [kVK_PageDown] = KEY_PAGEDOWN,
229 - [kVK_End] = KEY_END,
230 - [kVK_ForwardDelete] = KEY_DELETE,
231 -
232 - [kVK_Escape] = KEY_ESC,
233 -
234 - /* The Power key can't be used directly because the operating system uses
235 - * it. This key can be emulated by using it in place of another key such as
236 - * F1. Don't forget to disable the real key binding.
237 - */
238 - /* [kVK_F1] = KEY_POWER, */
239 -
240 - [kVK_F1] = KEY_F1,
241 - [kVK_F2] = KEY_F2,
242 - [kVK_F3] = KEY_F3,
243 - [kVK_F4] = KEY_F4,
244 - [kVK_F5] = KEY_F5,
245 - [kVK_F6] = KEY_F6,
246 - [kVK_F7] = KEY_F7,
247 - [kVK_F8] = KEY_F8,
248 - [kVK_F9] = KEY_F9,
249 - [kVK_F10] = KEY_F10,
250 - [kVK_F11] = KEY_F11,
251 - [kVK_F12] = KEY_F12,
252 - [kVK_F13] = KEY_SYSRQ,
253 - [kVK_F14] = KEY_SCROLLLOCK,
254 - [kVK_F15] = KEY_PAUSE,
255 -
256 - // JIS keyboards only
257 - [kVK_JIS_Yen] = KEY_YEN,
258 - [kVK_JIS_Underscore] = KEY_RO,
259 - [kVK_JIS_KeypadComma] = KEY_KPCOMMA,
260 - [kVK_JIS_Eisu] = KEY_MUHENKAN,
261 - [kVK_JIS_Kana] = KEY_HENKAN,
262 -
263 - /*
264 - * The eject and volume keys can't be used here because they are handled at
265 - * a lower level than what an Application can see.
266 - */
267 -};
268 -
269 -static unsigned int cocoa_keycode_to_linux(int keycode)
144 +static int cocoa_keycode_to_linux(int keycode)
145 {
271 - if (ARRAY_SIZE(mac_to_linux_map) <= keycode) {
146 + if (qemu_input_map_osx_to_linux_len <= keycode) {
147 error_report("(cocoa) warning unknown keycode 0x%x", keycode);
148 return 0;
149 }
275 - return mac_to_linux_map[keycode];
150 + return qemu_input_map_osx_to_linux[keycode];
151 }
152
153 /* Displays an alert dialog box with the specified message */