Skip to content

Commit

Permalink
iOS bug #3377: work around bugs in some third party iOS libraries (e.…
Browse files Browse the repository at this point in the history
…g. Google admob) where they assume the optional UIApplicationDelegate ?window? property always exists and will crash if it doesn?t.
  • Loading branch information
slime73 committed Dec 18, 2016
1 parent f956df2 commit 787a54c
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 1 deletion.
6 changes: 6 additions & 0 deletions src/video/uikit/SDL_uikitappdelegate.h
Expand Up @@ -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: */
22 changes: 21 additions & 1 deletion src/video/uikit/SDL_uikitappdelegate.m
Expand Up @@ -422,6 +422,26 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(
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);
Expand Down Expand Up @@ -467,7 +487,7 @@ - (void)applicationWillResignActive:(UIApplication*)application
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);
}
Expand Down

0 comments on commit 787a54c

Please sign in to comment.