Commit 1b689c335c581ec90921ac860cfc5a3e2ad3d3d0

Sam Lantinga 2016-12-01T11:52:47

Fixed bug 3503 - osx builds don't run on 10.6 as of rev. 10651 Ozkan Sezer With rev. 10651, i.e. http://hg.libsdl.org/SDL/rev/747a6a795b21 , SDL2 - OS X builds fail to run on 10.6 (my setup: i686 / 10.6.8) because the symbol _IOPMAssertionCreateWithDescription is missing. The SDK listing it for 10.7+ does seem correct. Reverting r10651 and rebuilding makes it to function again.

diff --git a/src/video/cocoa/SDL_cocoaevents.m b/src/video/cocoa/SDL_cocoaevents.m
index 5772685..17a3183 100644
--- a/src/video/cocoa/SDL_cocoaevents.m
+++ b/src/video/cocoa/SDL_cocoaevents.m
@@ -394,6 +394,17 @@ void
 Cocoa_PumpEvents(_THIS)
 { @autoreleasepool
 {
+    /* Update activity every 30 seconds to prevent screensaver */
+    SDL_VideoData *data = (SDL_VideoData *)_this->driverdata;
+    if (_this->suspend_screensaver && !data->screensaver_use_iopm) {
+        Uint32 now = SDL_GetTicks();
+        if (!data->screensaver_activity ||
+            SDL_TICKS_PASSED(now, data->screensaver_activity + 30000)) {
+            UpdateSystemActivity(UsrActivity);
+            data->screensaver_activity = now;
+        }
+    }
+
     for ( ; ; ) {
         NSEvent *event = [NSApp nextEventMatchingMask:NSAnyEventMask untilDate:[NSDate distantPast] inMode:NSDefaultRunLoopMode dequeue:YES ];
         if ( event == nil ) {
@@ -415,6 +426,10 @@ Cocoa_SuspendScreenSaver(_THIS)
 {
     SDL_VideoData *data = (SDL_VideoData *)_this->driverdata;
 
+    if (!data->screensaver_use_iopm) {
+        return;
+    }
+
     if (data->screensaver_assertion) {
         IOPMAssertionRelease(data->screensaver_assertion);
         data->screensaver_assertion = 0;
diff --git a/src/video/cocoa/SDL_cocoavideo.h b/src/video/cocoa/SDL_cocoavideo.h
index 90c46a7..498ce6c 100644
--- a/src/video/cocoa/SDL_cocoavideo.h
+++ b/src/video/cocoa/SDL_cocoavideo.h
@@ -52,6 +52,7 @@ typedef struct SDL_VideoData
     SDLTranslatorResponder *fieldEdit;
     NSInteger clipboard_count;
     Uint32 screensaver_activity;
+    BOOL screensaver_use_iopm;
     IOPMAssertionID screensaver_assertion;
 
 } SDL_VideoData;
diff --git a/src/video/cocoa/SDL_cocoavideo.m b/src/video/cocoa/SDL_cocoavideo.m
index 1e1f70f..e436e65 100644
--- a/src/video/cocoa/SDL_cocoavideo.m
+++ b/src/video/cocoa/SDL_cocoavideo.m
@@ -152,6 +152,9 @@ Cocoa_VideoInit(_THIS)
 
     data->allow_spaces = ((floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_6) && SDL_GetHintBoolean(SDL_HINT_VIDEO_MAC_FULLSCREEN_SPACES, SDL_TRUE));
 
+    /* The IOPM assertion API can disable the screensaver as of 10.7. */
+    data->screensaver_use_iopm = floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_6;
+
     return 0;
 }