Parcourir la source

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 il y a 1 mois
Parent
commit
911e53dece
1 fichiers modifiés avec 14 ajouts et 4 suppressions
  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;
     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];
-        return;
+    }
+
+    switch (event_type) {
+    case NSEventTypeMouseEntered:
     case NSEventTypeMouseExited:
-        Cocoa_MouseFocus = NULL;
+        // Focus is handled above
         return;
+
     case NSEventTypeMouseMoved:
     case NSEventTypeLeftMouseDragged:
     case NSEventTypeRightMouseDragged: