Skip to content

Commit

Permalink
Fixed bug 4658 - iOS 12 fullscreen flag and SDL_HINT_IOS_HIDE_HOME_IN…
Browse files Browse the repository at this point in the history
…DICATOR not working

Caleb Cornett

On iOS 12, creating a window with the SDL_WINDOW_FULLSCREEN flag does not dim the home indicator or defer system gestures. The same goes for setting the SDL_HINT_IOS_HIDE_HOME_INDICATOR to "2" -- it has no effect at all.

I've tracked down the source of this misbehavior to a timing issue. The initial `setNeedsUpdate...` calls were happening too early and getting applied to the launch screen by mistake. In the attached patch, I've added a call to those functions right after the launch screen is hidden so that they apply to the main view controller instead. This appears to fix the issue, at least on my iPhone 6s Plus.
  • Loading branch information
slouken committed Jun 9, 2019
1 parent 225ae69 commit e43550c
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 13 deletions.
1 change: 1 addition & 0 deletions src/video/uikit/SDL_uikitappdelegate.m
Expand Up @@ -343,6 +343,7 @@ - (void)hideLaunchScreen
window.alpha = 0.0;
} completion:^(BOOL finished) {
window.hidden = YES;
UIKit_ForceUpdateHomeIndicator(); /* Wait for launch screen to hide so settings are applied to the actual view controller. */
}];
}

Expand Down
14 changes: 1 addition & 13 deletions src/video/uikit/SDL_uikitmessagebox.m
Expand Up @@ -108,19 +108,7 @@
alertwindow.hidden = YES;
}

#if !TARGET_OS_TV
/* Force the main SDL window to re-evaluate home indicator state */
SDL_Window *focus = SDL_GetFocusWindow();
if (focus) {
SDL_WindowData *data = (__bridge SDL_WindowData *) focus->driverdata;
if (data != nil) {
if (@available(iOS 11.0, *)) {
[data.viewcontroller performSelectorOnMainThread:@selector(setNeedsUpdateOfHomeIndicatorAutoHidden) withObject:nil waitUntilDone:NO];
[data.viewcontroller performSelectorOnMainThread:@selector(setNeedsUpdateOfScreenEdgesDeferringSystemGestures) withObject:nil waitUntilDone:NO];
}
}
}
#endif /* !TARGET_OS_TV */
UIKit_ForceUpdateHomeIndicator();

*buttonid = messageboxdata->buttons[clickedindex].buttonid;
return YES;
Expand Down
2 changes: 2 additions & 0 deletions src/video/uikit/SDL_uikitvideo.h
Expand Up @@ -39,6 +39,8 @@ CGRect UIKit_ComputeViewFrame(SDL_Window *window, UIScreen *screen);

void UIKit_SuspendScreenSaver(_THIS);

void UIKit_ForceUpdateHomeIndicator(void);

SDL_bool UIKit_IsSystemVersionAtLeast(double version);

#endif /* SDL_uikitvideo_h_ */
Expand Down
18 changes: 18 additions & 0 deletions src/video/uikit/SDL_uikitvideo.m
Expand Up @@ -221,6 +221,24 @@ static void UIKit_DeleteDevice(SDL_VideoDevice * device)
return frame;
}

void
UIKit_ForceUpdateHomeIndicator()
{
#if !TARGET_OS_TV
/* Force the main SDL window to re-evaluate home indicator state */
SDL_Window *focus = SDL_GetFocusWindow();
if (focus) {
SDL_WindowData *data = (__bridge SDL_WindowData *) focus->driverdata;
if (data != nil) {
if (@available(iOS 11.0, *)) {
[data.viewcontroller performSelectorOnMainThread:@selector(setNeedsUpdateOfHomeIndicatorAutoHidden) withObject:nil waitUntilDone:NO];
[data.viewcontroller performSelectorOnMainThread:@selector(setNeedsUpdateOfScreenEdgesDeferringSystemGestures) withObject:nil waitUntilDone:NO];
}
}
}
#endif /* !TARGET_OS_TV */
}

/*
* iOS log support.
*
Expand Down

0 comments on commit e43550c

Please sign in to comment.