瀏覽代碼

cocoa: Resync modifier keypressed on NSEventTypeFlagsChanged event.

Fixes #7507.

(cherry picked from commit 70b65d4170bbff6a8c2ffc9b5834ec85384f6fc0)
Ryan C. Gordon 1 年之前
父節點
當前提交
61cd57d378
共有 1 個文件被更改,包括 12 次插入2 次删除
  1. 12 2
      src/video/cocoa/SDL_cocoakeyboard.m

+ 12 - 2
src/video/cocoa/SDL_cocoakeyboard.m

@@ -437,9 +437,19 @@ void Cocoa_HandleKeyEvent(_THIS, NSEvent *event)
     case NSEventTypeKeyUp:
         SDL_SendKeyboardKey(SDL_RELEASED, code);
         break;
-    case NSEventTypeFlagsChanged:
-        HandleModifiers(_this, code, (unsigned int)[event modifierFlags]);
+    case NSEventTypeFlagsChanged: {
+        // see if the new modifierFlags mean any existing keys should be pressed/released...
+        const unsigned int modflags = (unsigned int)[event modifierFlags];
+        HandleModifiers(_this, SDL_SCANCODE_LSHIFT, modflags);
+        HandleModifiers(_this, SDL_SCANCODE_LCTRL, modflags);
+        HandleModifiers(_this, SDL_SCANCODE_LALT, modflags);
+        HandleModifiers(_this, SDL_SCANCODE_LGUI, modflags);
+        HandleModifiers(_this, SDL_SCANCODE_RSHIFT, modflags);
+        HandleModifiers(_this, SDL_SCANCODE_RCTRL, modflags);
+        HandleModifiers(_this, SDL_SCANCODE_RALT, modflags);
+        HandleModifiers(_this, SDL_SCANCODE_RGUI, modflags);
         break;
+    }
     default: /* just to avoid compiler warnings */
         break;
     }