Commit 824ecc8f7a926c4f452de74f14a5378955b96f85

Sam Lantinga 2016-10-14T08:15:39

Fixed processing mouse and keyboard events in hatari, which uses the old SDLMain.m without creating an SDLApplication instance

diff --git a/src/video/cocoa/SDL_cocoaevents.m b/src/video/cocoa/SDL_cocoaevents.m
index b604fd7..17a3183 100644
--- a/src/video/cocoa/SDL_cocoaevents.m
+++ b/src/video/cocoa/SDL_cocoaevents.m
@@ -48,13 +48,12 @@
     SDL_SendQuit();
 }
 
-// Dispatch events here so that we can handle events caught by
-// nextEventMatchingMask in SDL, as well as events caught by other
-// processes (such as CEF) that are passed down to NSApp.
-- (void)sendEvent:(NSEvent *)theEvent
+static SDL_bool s_bShouldHandleEventsInSDLApplication = SDL_FALSE;
+
+static void Cocoa_DispatchEvent(NSEvent *theEvent)
 {
     SDL_VideoDevice *_this = SDL_GetVideoDevice();
-    
+
     switch ([theEvent type]) {
         case NSLeftMouseDown:
         case NSOtherMouseDown:
@@ -77,7 +76,17 @@
         default:
             break;
     }
-    
+}
+
+// Dispatch events here so that we can handle events caught by
+// nextEventMatchingMask in SDL, as well as events caught by other
+// processes (such as CEF) that are passed down to NSApp.
+- (void)sendEvent:(NSEvent *)theEvent
+{
+    if (s_bShouldHandleEventsInSDLApplication) {
+        Cocoa_DispatchEvent(theEvent);
+    }
+
     [super sendEvent:theEvent];
 }
 
@@ -348,6 +357,8 @@ Cocoa_RegisterApp(void)
         [SDLApplication sharedApplication];
         SDL_assert(NSApp != nil);
 
+        s_bShouldHandleEventsInSDLApplication = SDL_TRUE;
+
         if (!SDL_GetHintBoolean(SDL_HINT_MAC_BACKGROUND_APP, SDL_FALSE)) {
             [NSApp setActivationPolicy:NSApplicationActivationPolicyRegular];
             [NSApp activateIgnoringOtherApps:YES];
@@ -400,6 +411,10 @@ Cocoa_PumpEvents(_THIS)
             break;
         }
 
+        if (!s_bShouldHandleEventsInSDLApplication) {
+            Cocoa_DispatchEvent(event);
+        }
+
         // Pass events down to SDLApplication to be handled in sendEvent:
         [NSApp sendEvent:event];
     }