iOS bug #3377: work around bugs in some third party iOS libraries (e.g. Google admob) where they assume the optional UIApplicationDelegate ?window? property always exists and will crash if it doesn?t.

This commit is contained in:
Alex Szpakowski 2016-12-18 12:28:28 -04:00
parent f956df23bb
commit 787a54c84b
2 changed files with 27 additions and 1 deletions

View File

@ -36,6 +36,12 @@
- (void)hideLaunchScreen;
/* This property is marked as optional, and is only intended to be used when
* the app's UI is storyboard-based. SDL is not storyboard-based, however
* several major third-party ad APIs (e.g. Google admob) incorrectly assume this
* property always exists, and will crash if it doesn't. */
@property (nonatomic) UIWindow *window;
@end
/* vi: set ts=4 sw=4 expandtab: */

View File

@ -422,6 +422,26 @@ SDL_LoadLaunchImageNamed(NSString *name, int screenh)
return YES;
}
- (UIWindow *)window
{
SDL_VideoDevice *_this = SDL_GetVideoDevice();
if (_this) {
SDL_Window *window = NULL;
for (window = _this->windows; window != NULL; window = window->next) {
SDL_WindowData *data = (__bridge SDL_WindowData *) window->driverdata;
if (data != nil) {
return data.uiwindow;
}
}
}
return nil;
}
- (void)setWindow:(UIWindow *)window
{
/* Do nothing. */
}
- (void)applicationWillTerminate:(UIApplication *)application
{
SDL_SendAppEvent(SDL_APP_TERMINATING);
@ -467,7 +487,7 @@ SDL_LoadLaunchImageNamed(NSString *name, int screenh)
SDL_VideoDevice *_this = SDL_GetVideoDevice();
if (_this) {
SDL_Window *window;
for (window = _this->windows; window != nil; window = window->next) {
for (window = _this->windows; window != NULL; window = window->next) {
SDL_SendWindowEvent(window, SDL_WINDOWEVENT_FOCUS_LOST, 0, 0);
SDL_SendWindowEvent(window, SDL_WINDOWEVENT_MINIMIZED, 0, 0);
}