From 240a3fbffef6facafbd65933322ebc5be57a0ea7 Mon Sep 17 00:00:00 2001 From: Alex Szpakowski Date: Sat, 16 May 2015 16:55:56 -0300 Subject: [PATCH] iOS: Added support for SDL_DisableScreenSaver and SDL_EnableScreenSaver. --- include/SDL_hints.h | 3 +++ src/video/uikit/SDL_uikitvideo.h | 2 ++ src/video/uikit/SDL_uikitvideo.m | 17 +++++++++++++++++ 3 files changed, 22 insertions(+) diff --git a/include/SDL_hints.h b/include/SDL_hints.h index 5eaba8f5a991d..93ad5cb387da6 100644 --- a/include/SDL_hints.h +++ b/include/SDL_hints.h @@ -243,6 +243,9 @@ extern "C" { * this is problematic. This functionality can be disabled by setting this * hint. * + * As of SDL 2.0.4, SDL_EnableScreenSaver and SDL_DisableScreenSaver accomplish + * the same thing on iOS. They should be preferred over this hint. + * * This variable can be set to the following values: * "0" - Enable idle timer * "1" - Disable idle timer diff --git a/src/video/uikit/SDL_uikitvideo.h b/src/video/uikit/SDL_uikitvideo.h index dac80a2b34da6..190031cc5c017 100644 --- a/src/video/uikit/SDL_uikitvideo.h +++ b/src/video/uikit/SDL_uikitvideo.h @@ -25,6 +25,8 @@ #include "../SDL_sysvideo.h" +void UIKit_SuspendScreenSaver(_THIS); + BOOL UIKit_IsSystemVersionAtLeast(double version); CGRect UIKit_ComputeViewFrame(SDL_Window *window, UIScreen *screen); diff --git a/src/video/uikit/SDL_uikitvideo.m b/src/video/uikit/SDL_uikitvideo.m index c3448efc7cc26..25e44645564a2 100644 --- a/src/video/uikit/SDL_uikitvideo.m +++ b/src/video/uikit/SDL_uikitvideo.m @@ -26,6 +26,7 @@ #include "SDL_video.h" #include "SDL_mouse.h" +#include "SDL_hints.h" #include "../SDL_sysvideo.h" #include "../SDL_pixels_c.h" #include "../../events/SDL_events_c.h" @@ -74,6 +75,7 @@ static void UIKit_DeleteDevice(SDL_VideoDevice * device) device->GetDisplayModes = UIKit_GetDisplayModes; device->SetDisplayMode = UIKit_SetDisplayMode; device->PumpEvents = UIKit_PumpEvents; + device->SuspendScreenSaver = UIKit_SuspendScreenSaver; device->CreateWindow = UIKit_CreateWindow; device->SetWindowTitle = UIKit_SetWindowTitle; device->ShowWindow = UIKit_ShowWindow; @@ -130,6 +132,21 @@ static void UIKit_DeleteDevice(SDL_VideoDevice * device) UIKit_QuitModes(_this); } +void +UIKit_SuspendScreenSaver(_THIS) +{ + @autoreleasepool { + /* Ignore ScreenSaver API calls if the idle timer hint has been set. */ + /* FIXME: The idle timer hint should be deprecated for SDL 2.1. */ + if (SDL_GetHint(SDL_HINT_IDLE_TIMER_DISABLED) == NULL) { + UIApplication *app = [UIApplication sharedApplication]; + + /* Prevent the display from dimming and going to sleep. */ + app.idleTimerDisabled = (_this->suspend_screensaver != SDL_FALSE); + } + } +} + BOOL UIKit_IsSystemVersionAtLeast(double version) {