瀏覽代碼

Retain mouse focus as long as we're getting mouse events

Fixes https://github.com/libsdl-org/SDL/issues/12218
Fixes https://github.com/libsdl-org/SDL/issues/12323
Sam Lantinga 5 月之前
父節點
當前提交
911e53dece
共有 1 個文件被更改,包括 14 次插入4 次删除
  1. 14 4
      src/video/cocoa/SDL_cocoamouse.m

+ 14 - 4
src/video/cocoa/SDL_cocoamouse.m

@@ -447,13 +447,23 @@ void Cocoa_HandleMouseEvent(SDL_VideoDevice *_this, NSEvent *event)
     float deltaX, deltaY;
     float deltaX, deltaY;
     bool seenWarp;
     bool seenWarp;
 
 
-    switch ([event type]) {
-    case NSEventTypeMouseEntered:
+    // All events except NSEventTypeMouseExited can only happen if the window
+    // has mouse focus, so we'll always set the focus even if we happen to miss
+    // NSEventTypeMouseEntered, which apparently happens if the window is
+    // created under the mouse on macOS 12.7
+    NSEventType event_type = [event type];
+    if (event_type == NSEventTypeMouseExited) {
+        Cocoa_MouseFocus = NULL;
+    } else {
         Cocoa_MouseFocus = [event window];
         Cocoa_MouseFocus = [event window];
-        return;
+    }
+
+    switch (event_type) {
+    case NSEventTypeMouseEntered:
     case NSEventTypeMouseExited:
     case NSEventTypeMouseExited:
-        Cocoa_MouseFocus = NULL;
+        // Focus is handled above
         return;
         return;
+
     case NSEventTypeMouseMoved:
     case NSEventTypeMouseMoved:
     case NSEventTypeLeftMouseDragged:
     case NSEventTypeLeftMouseDragged:
     case NSEventTypeRightMouseDragged:
     case NSEventTypeRightMouseDragged: