diff --git a/Natives/Info.plist b/Natives/Info.plist
index bca09c08..2829f96a 100644
--- a/Natives/Info.plist
+++ b/Natives/Info.plist
@@ -135,6 +135,7 @@
UISupportedInterfaceOrientations
+ UIInterfaceOrientationPortrait
UIInterfaceOrientationLandscapeLeft
UIInterfaceOrientationLandscapeRight
diff --git a/Natives/LauncherSplitViewController.m b/Natives/LauncherSplitViewController.m
index efcbb765..c293781e 100644
--- a/Natives/LauncherSplitViewController.m
+++ b/Natives/LauncherSplitViewController.m
@@ -3,9 +3,8 @@
#import "LauncherNavigationController.h"
#import "utils.h"
-@interface LauncherSplitViewController () {
+@interface LauncherSplitViewController (){
}
-
@end
@implementation LauncherSplitViewController
@@ -14,26 +13,47 @@
[super viewDidLoad];
UIApplication.sharedApplication.idleTimerDisabled = YES;
setViewBackgroundColor(self.view);
-
- //TODO: maximumPrimaryColumnWidth
+ self.delegate = self;
LauncherMenuViewController *masterVc = [[LauncherMenuViewController alloc] init];
LauncherNavigationController *detailVc = [[LauncherNavigationController alloc] init];
detailVc.toolbarHidden = NO;
- self.presentsWithGesture = YES;
- self.preferredDisplayMode = UISplitViewControllerDisplayModeOneBesideSecondary;
- self.viewControllers = @[[[UINavigationController alloc] initWithRootViewController:masterVc], detailVc];
+ BOOL isPortrait = self.view.frame.size.height > self.view.frame.size.width;
+ self.preferredDisplayMode = isPortrait ?
+ UISplitViewControllerDisplayModeOneOverSecondary :
+ UISplitViewControllerDisplayModeOneBesideSecondary;
if (@available(iOS 14.0, tvOS 14.0, *)) {
- self.preferredSplitBehavior = UISplitViewControllerSplitBehaviorTile;
+ self.preferredSplitBehavior = isPortrait ?
+ UISplitViewControllerSplitBehaviorOverlay :
+ UISplitViewControllerSplitBehaviorTile;
+ }
+
+ self.presentsWithGesture = YES;
+
+ self.viewControllers = @[[[UINavigationController alloc] initWithRootViewController:masterVc], detailVc];
+}
+
+- (void)splitViewController:(UISplitViewController *)svc willChangeToDisplayMode:(UISplitViewControllerDisplayMode)displayMode {
+ if (self.preferredDisplayMode != displayMode) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ self.preferredDisplayMode = UISplitViewControllerDisplayModeSecondaryOnly;
+ });
}
}
-- (UITraitCollection *)traitCollection {
- // Allows splitting on compact-sized iPhones
- UITraitCollection *collection = super.traitCollection;
- UITraitCollection *horizontalCollection = [UITraitCollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassRegular];
- return [UITraitCollection traitCollectionWithTraitsFromCollections:@[collection, horizontalCollection]];
+- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator
+{
+ [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
+
+ self.preferredDisplayMode = size.height > size.width ?
+ UISplitViewControllerDisplayModeOneOverSecondary :
+ UISplitViewControllerDisplayModeOneBesideSecondary;
+ if (@available(iOS 14.0, tvOS 14.0, *)) {
+ self.preferredSplitBehavior = size.height > size.width ?
+ UISplitViewControllerSplitBehaviorOverlay :
+ UISplitViewControllerSplitBehaviorTile;
+ }
}
- (void)dismissViewController {
diff --git a/Natives/UIKit+hook.m b/Natives/UIKit+hook.m
index 7780419c..3d535170 100644
--- a/Natives/UIKit+hook.m
+++ b/Natives/UIKit+hook.m
@@ -39,6 +39,10 @@ __attribute__((constructor)) void hookConstructor(void) {
@implementation UITraitCollection(hook)
+- (UIUserInterfaceSizeClass)horizontalSizeClass {
+ return UIUserInterfaceSizeClassRegular;
+}
+
- (UIUserInterfaceSizeClass)verticalSizeClass {
return UIUserInterfaceSizeClassRegular;
}
diff --git a/Natives/utils.h b/Natives/utils.h
index b71e57f4..1baaee9a 100644
--- a/Natives/utils.h
+++ b/Natives/utils.h
@@ -70,7 +70,7 @@ void* gbuffer; // OSMesa framebuffer
long showingWindow;
int windowWidth, windowHeight;
int physicalWidth, physicalHeight;
-bool isInputReady, isCursorEntered, isPrepareGrabPos, isUseStackQueueCall;
+BOOL isInputReady, isCursorEntered, isPrepareGrabPos, isUseStackQueueCall;
jboolean isGrabbing;
BOOL virtualMouseEnabled;