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.
authorAlex Szpakowski <slime73@gmail.com>
Sat, 02 Apr 2016 11:54:05 -0300
changeset 10140 6dd5f49e4a77
parent 10139 bb54e1e47110
child 10141 fe9cf7c678f4
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.
include/SDL_hints.h
src/video/cocoa/SDL_cocoawindow.m
--- 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