diff --git a/include/SDL_hints.h b/include/SDL_hints.h index 3bd5435fb..068ffecb9 100644 --- a/include/SDL_hints.h +++ b/include/SDL_hints.h @@ -547,6 +547,13 @@ extern "C" { */ #define SDL_HINT_MAC_BACKGROUND_APP "SDL_MAC_BACKGROUND_APP" +/** + * \brief Allow mouse click events when clicking to focus an SDL window + * + * This hint only applies to Mac OS X. + */ +#define SDL_HINT_MAC_MOUSE_FOCUS_CLICKTHROUGH "SDL_MAC_MOUSE_FOCUS_CLICKTHROUGH" + /** * \brief Android APK expansion main file version. Should be a string number like "1", "2" etc. * diff --git a/src/video/cocoa/SDL_cocoawindow.m b/src/video/cocoa/SDL_cocoawindow.m index 0256525ed..88745774b 100644 --- a/src/video/cocoa/SDL_cocoawindow.m +++ b/src/video/cocoa/SDL_cocoawindow.m @@ -80,20 +80,20 @@ - (void)sendEvent:(NSEvent *)event { - [super sendEvent:event]; + [super sendEvent:event]; - if ([event type] != NSLeftMouseUp) { - return; - } + if ([event type] != NSLeftMouseUp) { + return; + } - id delegate = [self delegate]; - if (![delegate isKindOfClass:[Cocoa_WindowListener class]]) { - return; - } + id delegate = [self delegate]; + if (![delegate isKindOfClass:[Cocoa_WindowListener class]]) { + return; + } - if ([delegate isMoving]) { - [delegate windowDidFinishMoving]; - } + if ([delegate isMoving]) { + [delegate windowDidFinishMoving]; + } } /* We'll respond to selectors by doing nothing so we don't beep. @@ -1093,6 +1093,7 @@ SetWindowStyle(SDL_Window * window, unsigned int style) - (void)rightMouseDown:(NSEvent *)theEvent; - (BOOL)mouseDownCanMoveWindow; - (void)drawRect:(NSRect)dirtyRect; +- (BOOL)acceptsFirstMouse:(NSEvent *)theEvent; @end @implementation SDLView @@ -1132,6 +1133,12 @@ SetWindowStyle(SDL_Window * window, unsigned int style) cursor:[NSCursor invisibleCursor]]; } } + +- (BOOL)acceptsFirstMouse:(NSEvent *)theEvent +{ + const char *hint = SDL_GetHint(SDL_HINT_MAC_MOUSE_FOCUS_CLICKTHROUGH); + return hint && *hint != '0'; +} @end static int