diff --git a/platform/iphone/AppDelegate.h b/platform/iphone/AppDelegate.h index 629d0ec2c..0163e6c9e 100644 --- a/platform/iphone/AppDelegate.h +++ b/platform/iphone/AppDelegate.h @@ -40,16 +40,25 @@ namespace Rtt @interface AppViewController : CoronaViewController { UIResponder *fNextResponder; + + // NEW: Internal flags for gesture deferral + BOOL scDeferSystemGestures; // Enable/disable flag + UIRectEdge scDeferEdges; // Which edges to defer } - (void)setNextResponder:(UIResponder *)responder; - - (BOOL)prefersStatusBarHidden; +- (UIStatusBarStyle)preferredStatusBarStyle; + +- (void)setSystemGestureDeferralEnabled:(BOOL)enabled; +- (void)setSystemGestureDeferEdges:(UIRectEdge)edges; +- (BOOL)isSystemGestureDeferralEnabled; +- (UIRectEdge)systemGestureDeferEdges; -- (UIStatusBarStyle) preferredStatusBarStyle; +// Override this method instead of using @property +- (UIRectEdge)preferredScreenEdgesDeferringSystemGestures; @property (nonatomic, assign) BOOL prefersHomeIndicatorAutoHidden; -@property (nonatomic, assign) UIRectEdge preferredScreenEdgesDeferringSystemGestures; @property (nonatomic, assign) bool prefersStatusBarhidden; @property (nonatomic, assign) UIStatusBarStyle preferredStatusBarStyle; diff --git a/platform/iphone/AppDelegate.mm b/platform/iphone/AppDelegate.mm index 50276f545..536d0af8d 100644 --- a/platform/iphone/AppDelegate.mm +++ b/platform/iphone/AppDelegate.mm @@ -222,17 +222,43 @@ @implementation AppViewController @synthesize preferredStatusBarStyle = _preferredStatusBarStyle; @synthesize prefersHomeIndicatorAutoHidden; -@synthesize preferredScreenEdgesDeferringSystemGestures; - (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle { - self = [super initWithNibName:nibName bundle:nibBundle]; - if ( self ) - { - fNextResponder = nil; - } - return self; + self = [super initWithNibName:nibName bundle:nibBundle]; + if ( self ) + { + fNextResponder = nil; + scDeferSystemGestures = NO; + scDeferEdges = UIRectEdgeTop | UIRectEdgeBottom; // Start with top|bottom, NOT all + } + return self; +} + +- (UIRectEdge)preferredScreenEdgesDeferringSystemGestures +{ + return scDeferSystemGestures ? scDeferEdges : UIRectEdgeNone; +} + +- (void)setSystemGestureDeferralEnabled:(BOOL)enabled +{ + scDeferSystemGestures = enabled; +} + +- (void)setSystemGestureDeferEdges:(UIRectEdge)edges +{ + scDeferEdges = edges; +} + +- (BOOL)isSystemGestureDeferralEnabled +{ + return scDeferSystemGestures; +} + +- (UIRectEdge)systemGestureDeferEdges +{ + return scDeferEdges; } - (void)dealloc diff --git a/platform/iphone/Rtt_IPhonePlatform.mm b/platform/iphone/Rtt_IPhonePlatform.mm index e39f9f33e..1dc63186c 100644 --- a/platform/iphone/Rtt_IPhonePlatform.mm +++ b/platform/iphone/Rtt_IPhonePlatform.mm @@ -1128,14 +1128,15 @@ - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event [viewController setNeedsUpdateOfHomeIndicatorAutoHidden]; } } - else if ([k isEqualToString:@"preferredScreenEdgesDeferringSystemGestures"]) - { - viewController.preferredScreenEdgesDeferringSystemGestures = lua_toboolean( L, valueIndex )?UIRectEdgeAll:UIRectEdgeNone; - if (@available(iOS 11.0, *)) - { - [viewController setNeedsUpdateOfScreenEdgesDeferringSystemGestures]; - } - } + else if ([k isEqualToString:@"preferredScreenEdgesDeferringSystemGestures"]) + { + [viewController setSystemGestureDeferralEnabled:lua_toboolean(L, valueIndex)]; + [viewController setSystemGestureDeferEdges:(UIRectEdgeTop | UIRectEdgeBottom)]; + if (@available(iOS 11.0, *)) + { + [viewController setNeedsUpdateOfScreenEdgesDeferringSystemGestures]; + } + } else { Super::SetNativeProperty(L, key, valueIndex); @@ -1156,10 +1157,10 @@ - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event { lua_pushboolean(L, viewController.prefersHomeIndicatorAutoHidden); } - else if ([k isEqualToString:@"preferredScreenEdgesDeferringSystemGestures"]) - { - lua_pushboolean(L, viewController.preferredScreenEdgesDeferringSystemGestures != UIRectEdgeNone); - } + else if ([k isEqualToString:@"preferredScreenEdgesDeferringSystemGestures"]) + { + lua_pushboolean(L, [viewController isSystemGestureDeferralEnabled]); + } else { result = Super::PushNativeProperty(L, key);