Browse Source

Fix #13057 - fixes bug with NSEventTypeMouseMoved having a NULL window causing us to suppress future mouse move events because the window was considered out of focus.

danginsburg 3 months ago
parent
commit
968222e74f
1 changed files with 8 additions and 2 deletions
  1. 8 2
      src/video/cocoa/SDL_cocoamouse.m

+ 8 - 2
src/video/cocoa/SDL_cocoamouse.m

@@ -450,12 +450,18 @@ void Cocoa_HandleMouseEvent(SDL_VideoDevice *_this, NSEvent *event)
     // All events except NSEventTypeMouseExited can only happen if the window
     // 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
     // has mouse focus, so we'll always set the focus even if we happen to miss
     // NSEventTypeMouseEntered, which apparently happens if the window is
     // NSEventTypeMouseEntered, which apparently happens if the window is
-    // created under the mouse on macOS 12.7
+    // created under the mouse on macOS 12.7.  But, only set the focus if
+    // the event acutally has a non-NULL window, otherwise what would happen
+    // is that after an NSEventTypeMouseEntered there would sometimes be
+    // NSEventTypeMouseMoved without a window causing us to suppress subsequent
+    // mouse move events.
     NSEventType event_type = [event type];
     NSEventType event_type = [event type];
     if (event_type == NSEventTypeMouseExited) {
     if (event_type == NSEventTypeMouseExited) {
         Cocoa_MouseFocus = NULL;
         Cocoa_MouseFocus = NULL;
     } else {
     } else {
-        Cocoa_MouseFocus = [event window];
+        if ([event window] != NULL) {
+            Cocoa_MouseFocus = [event window];
+        }
     }
     }
 
 
     switch (event_type) {
     switch (event_type) {