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
This commit is contained in:
Sam Lantinga 2025-02-21 15:35:28 -08:00
parent 3b8cb62283
commit 911e53dece
1 changed files with 15 additions and 5 deletions

View File

@ -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]) { // All events except NSEventTypeMouseExited can only happen if the window
case NSEventTypeMouseEntered: // has mouse focus, so we'll always set the focus even if we happen to miss
Cocoa_MouseFocus = [event window]; // NSEventTypeMouseEntered, which apparently happens if the window is
return; // created under the mouse on macOS 12.7
case NSEventTypeMouseExited: NSEventType event_type = [event type];
if (event_type == NSEventTypeMouseExited) {
Cocoa_MouseFocus = NULL; Cocoa_MouseFocus = NULL;
} else {
Cocoa_MouseFocus = [event window];
}
switch (event_type) {
case NSEventTypeMouseEntered:
case NSEventTypeMouseExited:
// Focus is handled above
return; return;
case NSEventTypeMouseMoved: case NSEventTypeMouseMoved:
case NSEventTypeLeftMouseDragged: case NSEventTypeLeftMouseDragged:
case NSEventTypeRightMouseDragged: case NSEventTypeRightMouseDragged: