浏览代码

cocoadisplay: Use [event charactersIgnoringModifiers] when UCKeyTranslate() can not translate the input key

LD 5 年之前
父节点
当前提交
28f49ffd0b
共有 1 个文件被更改,包括 13 次插入0 次删除
  1. 13 0
      panda/src/cocoadisplay/cocoaGraphicsWindow.mm

+ 13 - 0
panda/src/cocoadisplay/cocoaGraphicsWindow.mm

@@ -1762,6 +1762,19 @@ handle_key_event(NSEvent *event) {
     return;
   }
 
+  // If UCKeyTranslate could not map the key into a valid unicode character or
+  // reserved symbol (See NSEvent.h), it returns 0x10 as translated character.
+  // This happens e.g.e with the combination Fn+F1.. keys.
+  // In that case, as fallback, we use charactersIgnoringModifiers to retrieve
+  // the character without modifiers.
+  if (c == 0x10) {
+    NSString *str = [event charactersIgnoringModifiers];
+    if (str == nil || [str length] != 1) {
+      return;
+    }
+    c = [str characterAtIndex: 0];
+  }
+
   ButtonHandle button = map_key(c);
 
   if (button == ButtonHandle::none()) {