Bläddra i källkod

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

LD 5 år sedan
förälder
incheckning
28f49ffd0b
1 ändrade filer med 13 tillägg och 0 borttagningar
  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;
     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);
   ButtonHandle button = map_key(c);
 
 
   if (button == ButtonHandle::none()) {
   if (button == ButtonHandle::none()) {