mirror of
https://github.com/Ryujinx/SDL.git
synced 2024-12-25 05:45:29 +00:00
Fixed a crash on iOS when none of the orientations in Info.plist match the SDL window's actual orientation.
Fixes bug #2967.
This commit is contained in:
parent
74d83ead35
commit
d603bb30e6
|
@ -1082,7 +1082,7 @@
|
||||||
29B97313FDCFA39411CA2CEA /* Project object */ = {
|
29B97313FDCFA39411CA2CEA /* Project object */ = {
|
||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
LastUpgradeCheck = 0420;
|
LastUpgradeCheck = 0630;
|
||||||
};
|
};
|
||||||
buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "SDL" */;
|
buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "SDL" */;
|
||||||
compatibilityVersion = "Xcode 3.2";
|
compatibilityVersion = "Xcode 3.2";
|
||||||
|
@ -1253,7 +1253,8 @@
|
||||||
GCC_OPTIMIZATION_LEVEL = 0;
|
GCC_OPTIMIZATION_LEVEL = 0;
|
||||||
GCC_SYMBOLS_PRIVATE_EXTERN = YES;
|
GCC_SYMBOLS_PRIVATE_EXTERN = YES;
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 3.1.3;
|
IPHONEOS_DEPLOYMENT_TARGET = 5.1.1;
|
||||||
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
};
|
};
|
||||||
|
@ -1265,7 +1266,7 @@
|
||||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||||
GCC_SYMBOLS_PRIVATE_EXTERN = YES;
|
GCC_SYMBOLS_PRIVATE_EXTERN = YES;
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 3.1.3;
|
IPHONEOS_DEPLOYMENT_TARGET = 5.1.1;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
};
|
};
|
||||||
|
@ -1278,10 +1279,10 @@
|
||||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||||
CLANG_WARN_OBJC_IMPLICIT_ATOMIC_PROPERTIES = YES;
|
CLANG_WARN_OBJC_IMPLICIT_ATOMIC_PROPERTIES = YES;
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 5.1.1;
|
|
||||||
GCC_WARN_MULTIPLE_DEFINITION_TYPES_FOR_SELECTOR = YES;
|
GCC_WARN_MULTIPLE_DEFINITION_TYPES_FOR_SELECTOR = YES;
|
||||||
GCC_WARN_STRICT_SELECTOR_MATCH = YES;
|
GCC_WARN_STRICT_SELECTOR_MATCH = YES;
|
||||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 5.1.1;
|
||||||
PRODUCT_NAME = SDL2;
|
PRODUCT_NAME = SDL2;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
};
|
};
|
||||||
|
@ -1294,10 +1295,10 @@
|
||||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||||
CLANG_WARN_OBJC_IMPLICIT_ATOMIC_PROPERTIES = YES;
|
CLANG_WARN_OBJC_IMPLICIT_ATOMIC_PROPERTIES = YES;
|
||||||
COPY_PHASE_STRIP = YES;
|
COPY_PHASE_STRIP = YES;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 5.1.1;
|
|
||||||
GCC_WARN_MULTIPLE_DEFINITION_TYPES_FOR_SELECTOR = YES;
|
GCC_WARN_MULTIPLE_DEFINITION_TYPES_FOR_SELECTOR = YES;
|
||||||
GCC_WARN_STRICT_SELECTOR_MATCH = YES;
|
GCC_WARN_STRICT_SELECTOR_MATCH = YES;
|
||||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 5.1.1;
|
||||||
PRODUCT_NAME = SDL2;
|
PRODUCT_NAME = SDL2;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
};
|
};
|
||||||
|
|
|
@ -191,13 +191,10 @@ UIKit_CreateWindow(_THIS, SDL_Window *window)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.uiscreen == [UIScreen mainScreen]) {
|
if (data.uiscreen == [UIScreen mainScreen]) {
|
||||||
NSUInteger orientations = UIKit_GetSupportedOrientations(window);
|
|
||||||
UIApplication *app = [UIApplication sharedApplication];
|
|
||||||
|
|
||||||
if (window->flags & (SDL_WINDOW_FULLSCREEN|SDL_WINDOW_BORDERLESS)) {
|
if (window->flags & (SDL_WINDOW_FULLSCREEN|SDL_WINDOW_BORDERLESS)) {
|
||||||
app.statusBarHidden = YES;
|
[UIApplication sharedApplication].statusBarHidden = YES;
|
||||||
} else {
|
} else {
|
||||||
app.statusBarHidden = NO;
|
[UIApplication sharedApplication].statusBarHidden = NO;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -345,9 +342,21 @@ NSUInteger
|
||||||
UIKit_GetSupportedOrientations(SDL_Window * window)
|
UIKit_GetSupportedOrientations(SDL_Window * window)
|
||||||
{
|
{
|
||||||
const char *hint = SDL_GetHint(SDL_HINT_ORIENTATIONS);
|
const char *hint = SDL_GetHint(SDL_HINT_ORIENTATIONS);
|
||||||
|
NSUInteger validOrientations = UIInterfaceOrientationMaskAll;
|
||||||
NSUInteger orientationMask = 0;
|
NSUInteger orientationMask = 0;
|
||||||
|
|
||||||
@autoreleasepool {
|
@autoreleasepool {
|
||||||
|
SDL_WindowData *data = (__bridge SDL_WindowData *) window->driverdata;
|
||||||
|
UIApplication *app = [UIApplication sharedApplication];
|
||||||
|
|
||||||
|
/* Get all possible valid orientations. If the app delegate doesn't tell
|
||||||
|
* us, we get the orientations from Info.plist via UIApplication. */
|
||||||
|
if ([app.delegate respondsToSelector:@selector(application:supportedInterfaceOrientationsForWindow:)]) {
|
||||||
|
validOrientations = [app.delegate application:app supportedInterfaceOrientationsForWindow:data.uiwindow];
|
||||||
|
} else if ([app respondsToSelector:@selector(supportedInterfaceOrientationsForWindow:)]) {
|
||||||
|
validOrientations = [app supportedInterfaceOrientationsForWindow:data.uiwindow];
|
||||||
|
}
|
||||||
|
|
||||||
if (hint != NULL) {
|
if (hint != NULL) {
|
||||||
NSArray *orientations = [@(hint) componentsSeparatedByString:@" "];
|
NSArray *orientations = [@(hint) componentsSeparatedByString:@" "];
|
||||||
|
|
||||||
|
@ -379,10 +388,17 @@ UIKit_GetSupportedOrientations(SDL_Window * window)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Don't allow upside-down orientation on the phone, so answering calls is in the natural orientation */
|
/* Don't allow upside-down orientation on phones, so answering calls is in the natural orientation */
|
||||||
if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone) {
|
if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone) {
|
||||||
orientationMask &= ~UIInterfaceOrientationMaskPortraitUpsideDown;
|
orientationMask &= ~UIInterfaceOrientationMaskPortraitUpsideDown;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If none of the specified orientations are actually supported by the
|
||||||
|
* app, we'll revert to what the app supports. An exception would be
|
||||||
|
* thrown by the system otherwise. */
|
||||||
|
if ((validOrientations & orientationMask) == 0) {
|
||||||
|
orientationMask = validOrientations;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return orientationMask;
|
return orientationMask;
|
||||||
|
|
Loading…
Reference in a new issue