Add a new hint SDL_HINT_MAC_MOUSE_FOCUS_CLICKTHROUGH, which allows mouse click events to occur when clicking to focus a window in Mac OS X.
Fixes bug #3300.
--- a/include/SDL_hints.h Fri Apr 01 19:18:50 2016 -0300
+++ b/include/SDL_hints.h Sat Apr 02 11:54:05 2016 -0300
@@ -548,6 +548,13 @@
#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.
*
* Must be set together with SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION.
--- a/src/video/cocoa/SDL_cocoawindow.m Fri Apr 01 19:18:50 2016 -0300
+++ b/src/video/cocoa/SDL_cocoawindow.m Sat Apr 02 11:54:05 2016 -0300
@@ -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 @@
- (void)rightMouseDown:(NSEvent *)theEvent;
- (BOOL)mouseDownCanMoveWindow;
- (void)drawRect:(NSRect)dirtyRect;
+- (BOOL)acceptsFirstMouse:(NSEvent *)theEvent;
@end
@implementation SDLView
@@ -1132,6 +1133,12 @@
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