]> source.dussan.org Git - tigervnc.git/commitdiff
Fix "grave" and "ISO" keys on macOS
authorPierre Ossman <ossman@cendio.se>
Tue, 23 Aug 2022 07:11:15 +0000 (09:11 +0200)
committerPierre Ossman <ossman@cendio.se>
Tue, 23 Aug 2022 07:11:15 +0000 (09:11 +0200)
We lacked an entry for one of these, and the magical swap that macOS
does for unknown reasons.

vncviewer/cocoa.mm
vncviewer/osx_to_qnum.c

index e8764f52a7d7c88e11ce4d1105d54dab56e424e7..cf9c9a8e22e811900d99ac50a9d07b9309d94113 100644 (file)
@@ -253,10 +253,21 @@ int cocoa_is_key_press(const void *event)
 int cocoa_event_keycode(const void *event)
 {
   NSEvent *nsevent;
+  int keycode;
 
   nsevent = (NSEvent*)event;
 
-  return [nsevent keyCode];
+  keycode = [nsevent keyCode];
+
+  // macOS swaps these two keys for unknown reasons for ISO layouts
+  if (KBGetLayoutType(LMGetKbdType()) == kKeyboardISO) {
+    if (keycode == kVK_ANSI_Grave)
+      return kVK_ISO_Section;
+    if (keycode == kVK_ISO_Section)
+      return kVK_ANSI_Grave;
+  }
+
+  return keycode;
 }
 
 static NSString *key_translate(UInt16 keyCode, UInt32 modifierFlags)
index 1295bad1fb9c7fe2e21c39baca73ecdeea639b49..5c3bfeb3d51347958ea51dfd98121afead6577c5 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * This file is auto-generated from keymaps.csv
- * Database checksum sha256(76d68c10e97d37fe2ea459e210125ae41796253fb217e900bf2983ade13a7920)
+ * Database checksum sha256(277b04f9dd721dd7942235d6ff107f992d95a083b651e73814ac3bb12f9c56d5)
  * To re-generate, run:
  *   keymap-gen code-map --lang=stdc keymaps.csv osx qnum
 */
@@ -15,6 +15,7 @@ const unsigned short code_map_osx_to_qnum[256] = {
   [0x7] = 0x2d, /* osx:7 (ANSI_X) -> linux:45 (KEY_X) -> qnum:45 */
   [0x8] = 0x2e, /* osx:8 (ANSI_C) -> linux:46 (KEY_C) -> qnum:46 */
   [0x9] = 0x2f, /* osx:9 (ANSI_V) -> linux:47 (KEY_V) -> qnum:47 */
+  [0xa] = 0x56, /* osx:10 (ISO_Section) -> linux:86 (KEY_102ND) -> qnum:86 */
   [0xb] = 0x30, /* osx:11 (ANSI_B) -> linux:48 (KEY_B) -> qnum:48 */
   [0xc] = 0x10, /* osx:12 (ANSI_Q) -> linux:16 (KEY_Q) -> qnum:16 */
   [0xd] = 0x11, /* osx:13 (ANSI_W) -> linux:17 (KEY_W) -> qnum:17 */