Ver Fonte

Removed OS X modifier flags cache

Related to #566.
Related to #567.
Xo Wang há 10 anos atrás
pai
commit
9f5658c8ac
3 ficheiros alterados com 26 adições e 9 exclusões
  1. 1 0
      README.md
  2. 0 1
      src/cocoa_platform.h
  3. 25 8
      src/cocoa_window.m

+ 1 - 0
README.md

@@ -247,6 +247,7 @@ skills.
  - Simon Voordouw
  - Simon Voordouw
  - Torsten Walluhn
  - Torsten Walluhn
  - Patrick Walton
  - Patrick Walton
+ - Xo Wang
  - Jay Weisskopf
  - Jay Weisskopf
  - Frank Wille
  - Frank Wille
  - yuriks
  - yuriks

+ 0 - 1
src/cocoa_platform.h

@@ -66,7 +66,6 @@ typedef struct _GLFWwindowNS
     id              object;
     id              object;
     id              delegate;
     id              delegate;
     id              view;
     id              view;
-    unsigned int    modifierFlags;
 
 
     // The total sum of the distances the cursor has been warped
     // The total sum of the distances the cursor has been warped
     // since the last cursor motion event was processed
     // since the last cursor motion event was processed

+ 25 - 8
src/cocoa_window.m

@@ -123,6 +123,29 @@ static int translateKey(unsigned int key)
     return _glfw.ns.publicKeys[key];
     return _glfw.ns.publicKeys[key];
 }
 }
 
 
+// Translate a GLFW keycode to a Cocoa modifier flag
+//
+static NSUInteger translateKeyToModifierFlag(int key)
+{
+    switch (key)
+    {
+        case GLFW_KEY_LEFT_SHIFT:
+        case GLFW_KEY_RIGHT_SHIFT:
+            return NSShiftKeyMask;
+        case GLFW_KEY_LEFT_CONTROL:
+        case GLFW_KEY_RIGHT_CONTROL:
+            return NSControlKeyMask;
+        case GLFW_KEY_LEFT_ALT:
+        case GLFW_KEY_RIGHT_ALT:
+            return NSAlternateKeyMask;
+        case GLFW_KEY_LEFT_SUPER:
+        case GLFW_KEY_RIGHT_SUPER:
+            return NSCommandKeyMask;
+    }
+
+    return 0;
+}
+
 
 
 //------------------------------------------------------------------------
 //------------------------------------------------------------------------
 // Delegate for window related notifications
 // Delegate for window related notifications
@@ -206,9 +229,6 @@ static int translateKey(unsigned int key)
 
 
 - (void)windowDidBecomeKey:(NSNotification *)notification
 - (void)windowDidBecomeKey:(NSNotification *)notification
 {
 {
-    window->ns.modifierFlags =
-        [NSEvent modifierFlags] & NSDeviceIndependentModifierFlagsMask;
-
     if (_glfw.cursorWindow == window &&
     if (_glfw.cursorWindow == window &&
         window->cursorMode == GLFW_CURSOR_DISABLED)
         window->cursorMode == GLFW_CURSOR_DISABLED)
     {
     {
@@ -502,21 +522,18 @@ static int translateKey(unsigned int key)
         [event modifierFlags] & NSDeviceIndependentModifierFlagsMask;
         [event modifierFlags] & NSDeviceIndependentModifierFlagsMask;
     const int key = translateKey([event keyCode]);
     const int key = translateKey([event keyCode]);
     const int mods = translateFlags(modifierFlags);
     const int mods = translateFlags(modifierFlags);
+    const NSUInteger keyFlag = translateKeyToModifierFlag(key);
 
 
-    if (modifierFlags == window->ns.modifierFlags)
+    if (keyFlag & modifierFlags)
     {
     {
         if (window->keys[key] == GLFW_PRESS)
         if (window->keys[key] == GLFW_PRESS)
             action = GLFW_RELEASE;
             action = GLFW_RELEASE;
         else
         else
             action = GLFW_PRESS;
             action = GLFW_PRESS;
     }
     }
-    else if (modifierFlags > window->ns.modifierFlags)
-        action = GLFW_PRESS;
     else
     else
         action = GLFW_RELEASE;
         action = GLFW_RELEASE;
 
 
-    window->ns.modifierFlags = modifierFlags;
-
     _glfwInputKey(window, key, [event keyCode], action, mods);
     _glfwInputKey(window, key, [event keyCode], action, mods);
 }
 }