ui/cocoa: Use Linux key codes
QemuInputEvent now stores Linux key codes for key events. Use those codes directly instead of translating between internal key code representations. Signed-off-by: Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Message-ID: <20260520-input-v3-17-7c9e4c7abe34@rsg.ci.i.u-tokyo.ac.jp>
Akihiko Odaki committed
May 20, 2026 at 15:48 UTC
61ac2f10b85017e93e65a8c7828d0033e804952a
1 file changed
+148
-180
ui/cocoa.m
+148
-180
@@ -30,6 +30,7 @@
30
31
#include "qemu/help-texts.h"
32
#include "qemu-main.h"
33
+#include "standard-headers/linux/input-event-codes.h"
34
#include "ui/clipboard.h"
35
#include "ui/console.h"
36
#include "ui/input.h"
@@ -140,124 +141,124 @@ static bool bool_with_bql(BoolCodeBlock block)
141
return val;
142
}
143
143
-// Mac to QKeyCode conversion
144
-static const int mac_to_qkeycode_map[] = {
145
- [kVK_ANSI_A] = Q_KEY_CODE_A,
146
- [kVK_ANSI_B] = Q_KEY_CODE_B,
147
- [kVK_ANSI_C] = Q_KEY_CODE_C,
148
- [kVK_ANSI_D] = Q_KEY_CODE_D,
149
- [kVK_ANSI_E] = Q_KEY_CODE_E,
150
- [kVK_ANSI_F] = Q_KEY_CODE_F,
151
- [kVK_ANSI_G] = Q_KEY_CODE_G,
152
- [kVK_ANSI_H] = Q_KEY_CODE_H,
153
- [kVK_ANSI_I] = Q_KEY_CODE_I,
154
- [kVK_ANSI_J] = Q_KEY_CODE_J,
155
- [kVK_ANSI_K] = Q_KEY_CODE_K,
156
- [kVK_ANSI_L] = Q_KEY_CODE_L,
157
- [kVK_ANSI_M] = Q_KEY_CODE_M,
158
- [kVK_ANSI_N] = Q_KEY_CODE_N,
159
- [kVK_ANSI_O] = Q_KEY_CODE_O,
160
- [kVK_ANSI_P] = Q_KEY_CODE_P,
161
- [kVK_ANSI_Q] = Q_KEY_CODE_Q,
162
- [kVK_ANSI_R] = Q_KEY_CODE_R,
163
- [kVK_ANSI_S] = Q_KEY_CODE_S,
164
- [kVK_ANSI_T] = Q_KEY_CODE_T,
165
- [kVK_ANSI_U] = Q_KEY_CODE_U,
166
- [kVK_ANSI_V] = Q_KEY_CODE_V,
167
- [kVK_ANSI_W] = Q_KEY_CODE_W,
168
- [kVK_ANSI_X] = Q_KEY_CODE_X,
169
- [kVK_ANSI_Y] = Q_KEY_CODE_Y,
170
- [kVK_ANSI_Z] = Q_KEY_CODE_Z,
171
-
172
- [kVK_ANSI_0] = Q_KEY_CODE_0,
173
- [kVK_ANSI_1] = Q_KEY_CODE_1,
174
- [kVK_ANSI_2] = Q_KEY_CODE_2,
175
- [kVK_ANSI_3] = Q_KEY_CODE_3,
176
- [kVK_ANSI_4] = Q_KEY_CODE_4,
177
- [kVK_ANSI_5] = Q_KEY_CODE_5,
178
- [kVK_ANSI_6] = Q_KEY_CODE_6,
179
- [kVK_ANSI_7] = Q_KEY_CODE_7,
180
- [kVK_ANSI_8] = Q_KEY_CODE_8,
181
- [kVK_ANSI_9] = Q_KEY_CODE_9,
182
-
183
- [kVK_ANSI_Grave] = Q_KEY_CODE_GRAVE_ACCENT,
184
- [kVK_ANSI_Minus] = Q_KEY_CODE_MINUS,
185
- [kVK_ANSI_Equal] = Q_KEY_CODE_EQUAL,
186
- [kVK_Delete] = Q_KEY_CODE_BACKSPACE,
187
- [kVK_CapsLock] = Q_KEY_CODE_CAPS_LOCK,
188
- [kVK_Tab] = Q_KEY_CODE_TAB,
189
- [kVK_Return] = Q_KEY_CODE_RET,
190
- [kVK_ANSI_LeftBracket] = Q_KEY_CODE_BRACKET_LEFT,
191
- [kVK_ANSI_RightBracket] = Q_KEY_CODE_BRACKET_RIGHT,
192
- [kVK_ANSI_Backslash] = Q_KEY_CODE_BACKSLASH,
193
- [kVK_ANSI_Semicolon] = Q_KEY_CODE_SEMICOLON,
194
- [kVK_ANSI_Quote] = Q_KEY_CODE_APOSTROPHE,
195
- [kVK_ANSI_Comma] = Q_KEY_CODE_COMMA,
196
- [kVK_ANSI_Period] = Q_KEY_CODE_DOT,
197
- [kVK_ANSI_Slash] = Q_KEY_CODE_SLASH,
198
- [kVK_Space] = Q_KEY_CODE_SPC,
199
-
200
- [kVK_ANSI_Keypad0] = Q_KEY_CODE_KP_0,
201
- [kVK_ANSI_Keypad1] = Q_KEY_CODE_KP_1,
202
- [kVK_ANSI_Keypad2] = Q_KEY_CODE_KP_2,
203
- [kVK_ANSI_Keypad3] = Q_KEY_CODE_KP_3,
204
- [kVK_ANSI_Keypad4] = Q_KEY_CODE_KP_4,
205
- [kVK_ANSI_Keypad5] = Q_KEY_CODE_KP_5,
206
- [kVK_ANSI_Keypad6] = Q_KEY_CODE_KP_6,
207
- [kVK_ANSI_Keypad7] = Q_KEY_CODE_KP_7,
208
- [kVK_ANSI_Keypad8] = Q_KEY_CODE_KP_8,
209
- [kVK_ANSI_Keypad9] = Q_KEY_CODE_KP_9,
210
- [kVK_ANSI_KeypadDecimal] = Q_KEY_CODE_KP_DECIMAL,
211
- [kVK_ANSI_KeypadEnter] = Q_KEY_CODE_KP_ENTER,
212
- [kVK_ANSI_KeypadPlus] = Q_KEY_CODE_KP_ADD,
213
- [kVK_ANSI_KeypadMinus] = Q_KEY_CODE_KP_SUBTRACT,
214
- [kVK_ANSI_KeypadMultiply] = Q_KEY_CODE_KP_MULTIPLY,
215
- [kVK_ANSI_KeypadDivide] = Q_KEY_CODE_KP_DIVIDE,
216
- [kVK_ANSI_KeypadEquals] = Q_KEY_CODE_KP_EQUALS,
217
- [kVK_ANSI_KeypadClear] = Q_KEY_CODE_NUM_LOCK,
218
-
219
- [kVK_UpArrow] = Q_KEY_CODE_UP,
220
- [kVK_DownArrow] = Q_KEY_CODE_DOWN,
221
- [kVK_LeftArrow] = Q_KEY_CODE_LEFT,
222
- [kVK_RightArrow] = Q_KEY_CODE_RIGHT,
223
-
224
- [kVK_Help] = Q_KEY_CODE_INSERT,
225
- [kVK_Home] = Q_KEY_CODE_HOME,
226
- [kVK_PageUp] = Q_KEY_CODE_PGUP,
227
- [kVK_PageDown] = Q_KEY_CODE_PGDN,
228
- [kVK_End] = Q_KEY_CODE_END,
229
- [kVK_ForwardDelete] = Q_KEY_CODE_DELETE,
230
-
231
- [kVK_Escape] = Q_KEY_CODE_ESC,
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
*/
237
- /* [kVK_F1] = Q_KEY_CODE_POWER, */
238
-
239
- [kVK_F1] = Q_KEY_CODE_F1,
240
- [kVK_F2] = Q_KEY_CODE_F2,
241
- [kVK_F3] = Q_KEY_CODE_F3,
242
- [kVK_F4] = Q_KEY_CODE_F4,
243
- [kVK_F5] = Q_KEY_CODE_F5,
244
- [kVK_F6] = Q_KEY_CODE_F6,
245
- [kVK_F7] = Q_KEY_CODE_F7,
246
- [kVK_F8] = Q_KEY_CODE_F8,
247
- [kVK_F9] = Q_KEY_CODE_F9,
248
- [kVK_F10] = Q_KEY_CODE_F10,
249
- [kVK_F11] = Q_KEY_CODE_F11,
250
- [kVK_F12] = Q_KEY_CODE_F12,
251
- [kVK_F13] = Q_KEY_CODE_PRINT,
252
- [kVK_F14] = Q_KEY_CODE_SCROLL_LOCK,
253
- [kVK_F15] = Q_KEY_CODE_PAUSE,
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
256
- [kVK_JIS_Yen] = Q_KEY_CODE_YEN,
257
- [kVK_JIS_Underscore] = Q_KEY_CODE_RO,
258
- [kVK_JIS_KeypadComma] = Q_KEY_CODE_KP_COMMA,
259
- [kVK_JIS_Eisu] = Q_KEY_CODE_MUHENKAN,
260
- [kVK_JIS_Kana] = Q_KEY_CODE_HENKAN,
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,13 +266,13 @@ static const int mac_to_qkeycode_map[] = {
266
*/
267
};
268
268
-static int cocoa_keycode_to_qemu(int keycode)
269
+static unsigned int cocoa_keycode_to_linux(int keycode)
270
{
270
- if (ARRAY_SIZE(mac_to_qkeycode_map) <= keycode) {
271
+ if (ARRAY_SIZE(mac_to_linux_map) <= keycode) {
272
error_report("(cocoa) warning unknown keycode 0x%x", keycode);
273
return 0;
274
}
274
- return mac_to_qkeycode_map[keycode];
275
+ return mac_to_linux_map[keycode];
276
}
277
278
/* Displays an alert dialog box with the specified message */
@@ -766,9 +767,8 @@ static CGEventRef handleTapEvent(CGEventTapProxy proxy, CGEventType type, CGEven
767
CFRelease(tapEventsSrc);
768
}
769
769
-- (void) toggleKey: (int)keycode {
770
- unsigned int lnx = qemu_input_map_qcode_to_linux[keycode];
771
- qkbd_state_key_event(kbd, lnx, !qkbd_state_key_get(kbd, lnx));
770
+- (void) toggleKey: (unsigned int)keycode {
771
+ qkbd_state_key_event(kbd, keycode, !qkbd_state_key_get(kbd, keycode));
772
}
773
774
// Does the work of sending input to the monitor
@@ -848,7 +848,7 @@ static CGEventRef handleTapEvent(CGEventTapProxy proxy, CGEventType type, CGEven
848
/* Return true if we handled the event, false if it should be given to OSX */
849
COCOA_DEBUG("QemuCocoaView: handleEvent\n");
850
InputButton button;
851
- int keycode = 0;
851
+ unsigned int keycode;
852
NSUInteger modifiers = [event modifierFlags];
853
854
/*
@@ -890,62 +890,34 @@ static CGEventRef handleTapEvent(CGEventTapProxy proxy, CGEventType type, CGEven
890
*/
891
if (!!(modifiers & NSEventModifierFlagCapsLock) !=
892
qkbd_state_modifier_get(kbd, QKBD_MOD_CAPSLOCK)) {
893
- qkbd_state_key_event(kbd,
894
- qemu_input_map_qcode_to_linux[Q_KEY_CODE_CAPS_LOCK],
895
- true);
896
- qkbd_state_key_event(kbd,
897
- qemu_input_map_qcode_to_linux[Q_KEY_CODE_CAPS_LOCK],
898
- false);
893
+ qkbd_state_key_event(kbd, KEY_CAPSLOCK, true);
894
+ qkbd_state_key_event(kbd, KEY_CAPSLOCK, false);
895
}
896
897
if (!(modifiers & NSEventModifierFlagShift)) {
902
- qkbd_state_key_event(kbd,
903
- qemu_input_map_qcode_to_linux[Q_KEY_CODE_SHIFT],
904
- false);
905
- qkbd_state_key_event(kbd,
906
- qemu_input_map_qcode_to_linux[Q_KEY_CODE_SHIFT_R],
907
- false);
898
+ qkbd_state_key_event(kbd, KEY_LEFTSHIFT, false);
899
+ qkbd_state_key_event(kbd, KEY_RIGHTSHIFT, false);
900
}
901
if (!(modifiers & NSEventModifierFlagControl)) {
910
- qkbd_state_key_event(kbd,
911
- qemu_input_map_qcode_to_linux[Q_KEY_CODE_CTRL],
912
- false);
913
- qkbd_state_key_event(kbd,
914
- qemu_input_map_qcode_to_linux[Q_KEY_CODE_CTRL_R],
915
- false);
902
+ qkbd_state_key_event(kbd, KEY_LEFTCTRL, false);
903
+ qkbd_state_key_event(kbd, KEY_RIGHTCTRL, false);
904
}
905
if (!(modifiers & NSEventModifierFlagOption)) {
906
if (swap_opt_cmd) {
919
- qkbd_state_key_event(kbd,
920
- qemu_input_map_qcode_to_linux[Q_KEY_CODE_META_L],
921
- false);
922
- qkbd_state_key_event(kbd,
923
- qemu_input_map_qcode_to_linux[Q_KEY_CODE_META_R],
924
- false);
907
+ qkbd_state_key_event(kbd, KEY_LEFTMETA, false);
908
+ qkbd_state_key_event(kbd, KEY_RIGHTMETA, false);
909
} else {
926
- qkbd_state_key_event(kbd,
927
- qemu_input_map_qcode_to_linux[Q_KEY_CODE_ALT],
928
- false);
929
- qkbd_state_key_event(kbd,
930
- qemu_input_map_qcode_to_linux[Q_KEY_CODE_ALT_R],
931
- false);
910
+ qkbd_state_key_event(kbd, KEY_LEFTALT, false);
911
+ qkbd_state_key_event(kbd, KEY_RIGHTALT, false);
912
}
913
}
914
if (!(modifiers & NSEventModifierFlagCommand)) {
915
if (swap_opt_cmd) {
936
- qkbd_state_key_event(kbd,
937
- qemu_input_map_qcode_to_linux[Q_KEY_CODE_ALT],
938
- false);
939
- qkbd_state_key_event(kbd,
940
- qemu_input_map_qcode_to_linux[Q_KEY_CODE_ALT_R],
941
- false);
916
+ qkbd_state_key_event(kbd, KEY_LEFTALT, false);
917
+ qkbd_state_key_event(kbd, KEY_RIGHTALT, false);
918
} else {
943
- qkbd_state_key_event(kbd,
944
- qemu_input_map_qcode_to_linux[Q_KEY_CODE_META_L],
945
- false);
946
- qkbd_state_key_event(kbd,
947
- qemu_input_map_qcode_to_linux[Q_KEY_CODE_META_R],
948
- false);
919
+ qkbd_state_key_event(kbd, KEY_LEFTMETA, false);
920
+ qkbd_state_key_event(kbd, KEY_RIGHTMETA, false);
921
}
922
}
923
@@ -954,34 +926,34 @@ static CGEventRef handleTapEvent(CGEventTapProxy proxy, CGEventType type, CGEven
926
switch ([event keyCode]) {
927
case kVK_Shift:
928
if (!!(modifiers & NSEventModifierFlagShift)) {
957
- [self toggleKey:Q_KEY_CODE_SHIFT];
929
+ [self toggleKey:KEY_LEFTSHIFT];
930
}
931
break;
932
933
case kVK_RightShift:
934
if (!!(modifiers & NSEventModifierFlagShift)) {
963
- [self toggleKey:Q_KEY_CODE_SHIFT_R];
935
+ [self toggleKey:KEY_RIGHTSHIFT];
936
}
937
break;
938
939
case kVK_Control:
940
if (!!(modifiers & NSEventModifierFlagControl)) {
969
- [self toggleKey:Q_KEY_CODE_CTRL];
941
+ [self toggleKey:KEY_LEFTCTRL];
942
}
943
break;
944
945
case kVK_RightControl:
946
if (!!(modifiers & NSEventModifierFlagControl)) {
975
- [self toggleKey:Q_KEY_CODE_CTRL_R];
947
+ [self toggleKey:KEY_RIGHTCTRL];
948
}
949
break;
950
951
case kVK_Option:
952
if (!!(modifiers & NSEventModifierFlagOption)) {
953
if (swap_opt_cmd) {
982
- [self toggleKey:Q_KEY_CODE_META_L];
954
+ [self toggleKey:KEY_LEFTMETA];
955
} else {
984
- [self toggleKey:Q_KEY_CODE_ALT];
956
+ [self toggleKey:KEY_LEFTALT];
957
}
958
}
959
break;
@@ -989,9 +961,9 @@ static CGEventRef handleTapEvent(CGEventTapProxy proxy, CGEventType type, CGEven
961
case kVK_RightOption:
962
if (!!(modifiers & NSEventModifierFlagOption)) {
963
if (swap_opt_cmd) {
992
- [self toggleKey:Q_KEY_CODE_META_R];
964
+ [self toggleKey:KEY_RIGHTMETA];
965
} else {
994
- [self toggleKey:Q_KEY_CODE_ALT_R];
966
+ [self toggleKey:KEY_RIGHTALT];
967
}
968
}
969
break;
@@ -1002,9 +974,9 @@ static CGEventRef handleTapEvent(CGEventTapProxy proxy, CGEventType type, CGEven
974
!!(modifiers & NSEventModifierFlagCommand) &&
975
left_command_key_enabled) {
976
if (swap_opt_cmd) {
1005
- [self toggleKey:Q_KEY_CODE_ALT];
977
+ [self toggleKey:KEY_LEFTALT];
978
} else {
1007
- [self toggleKey:Q_KEY_CODE_META_L];
979
+ [self toggleKey:KEY_LEFTMETA];
980
}
981
}
982
break;
@@ -1013,16 +985,16 @@ static CGEventRef handleTapEvent(CGEventTapProxy proxy, CGEventType type, CGEven
985
if (isMouseGrabbed &&
986
!!(modifiers & NSEventModifierFlagCommand)) {
987
if (swap_opt_cmd) {
1016
- [self toggleKey:Q_KEY_CODE_ALT_R];
988
+ [self toggleKey:KEY_RIGHTALT];
989
} else {
1018
- [self toggleKey:Q_KEY_CODE_META_R];
990
+ [self toggleKey:KEY_RIGHTMETA];
991
}
992
}
993
break;
994
}
995
return true;
996
case NSEventTypeKeyDown:
1025
- keycode = cocoa_keycode_to_qemu([event keyCode]);
997
+ keycode = cocoa_keycode_to_linux([event keyCode]);
998
999
// forward command key combos to the host UI unless the mouse is grabbed
1000
if (!isMouseGrabbed && ([event modifierFlags] & NSEventModifierFlagCommand)) {
@@ -1052,15 +1024,13 @@ static CGEventRef handleTapEvent(CGEventTapProxy proxy, CGEventType type, CGEven
1024
}
1025
1026
if (qemu_console_is_graphic(dcl.con)) {
1055
- qkbd_state_key_event(kbd,
1056
- qemu_input_map_qcode_to_linux[keycode],
1057
- true);
1027
+ qkbd_state_key_event(kbd, keycode, true);
1028
} else {
1029
[self handleMonitorInput: event];
1030
}
1031
return true;
1032
case NSEventTypeKeyUp:
1063
- keycode = cocoa_keycode_to_qemu([event keyCode]);
1033
+ keycode = cocoa_keycode_to_linux([event keyCode]);
1034
1035
// don't pass the guest a spurious key-up if we treated this
1036
// command-key combo as a host UI action
@@ -1069,9 +1039,7 @@ static CGEventRef handleTapEvent(CGEventTapProxy proxy, CGEventType type, CGEven
1039
}
1040
1041
if (qemu_console_is_graphic(dcl.con)) {
1072
- qkbd_state_key_event(kbd,
1073
- qemu_input_map_qcode_to_linux[keycode],
1074
- false);
1042
+ qkbd_state_key_event(kbd, keycode, false);
1043
}
1044
return true;
1045
case NSEventTypeScrollWheel: