Skip to content

Commit 7dedd16

Browse files
iOS: Properly handle system gesture deferral for preferredScreenEdge (#864)
1 parent 51a347c commit 7dedd16

File tree

3 files changed

+58
-22
lines changed

3 files changed

+58
-22
lines changed

platform/iphone/AppDelegate.h

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,16 +40,25 @@ namespace Rtt
4040
@interface AppViewController : CoronaViewController
4141
{
4242
UIResponder *fNextResponder;
43+
44+
// NEW: Internal flags for gesture deferral
45+
BOOL scDeferSystemGestures; // Enable/disable flag
46+
UIRectEdge scDeferEdges; // Which edges to defer
4347
}
4448

4549
- (void)setNextResponder:(UIResponder *)responder;
46-
4750
- (BOOL)prefersStatusBarHidden;
51+
- (UIStatusBarStyle)preferredStatusBarStyle;
52+
53+
- (void)setSystemGestureDeferralEnabled:(BOOL)enabled;
54+
- (void)setSystemGestureDeferEdges:(UIRectEdge)edges;
55+
- (BOOL)isSystemGestureDeferralEnabled;
56+
- (UIRectEdge)systemGestureDeferEdges;
4857

49-
- (UIStatusBarStyle) preferredStatusBarStyle;
58+
// Override this method instead of using @property
59+
- (UIRectEdge)preferredScreenEdgesDeferringSystemGestures;
5060

5161
@property (nonatomic, assign) BOOL prefersHomeIndicatorAutoHidden;
52-
@property (nonatomic, assign) UIRectEdge preferredScreenEdgesDeferringSystemGestures;
5362
@property (nonatomic, assign) bool prefersStatusBarhidden;
5463
@property (nonatomic, assign) UIStatusBarStyle preferredStatusBarStyle;
5564

platform/iphone/AppDelegate.mm

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -222,17 +222,43 @@ @implementation AppViewController
222222

223223
@synthesize preferredStatusBarStyle = _preferredStatusBarStyle;
224224
@synthesize prefersHomeIndicatorAutoHidden;
225-
@synthesize preferredScreenEdgesDeferringSystemGestures;
226225

227226

228227
- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle
229228
{
230-
self = [super initWithNibName:nibName bundle:nibBundle];
231-
if ( self )
232-
{
233-
fNextResponder = nil;
234-
}
235-
return self;
229+
self = [super initWithNibName:nibName bundle:nibBundle];
230+
if ( self )
231+
{
232+
fNextResponder = nil;
233+
scDeferSystemGestures = NO;
234+
scDeferEdges = UIRectEdgeTop | UIRectEdgeBottom; // Start with top|bottom, NOT all
235+
}
236+
return self;
237+
}
238+
239+
- (UIRectEdge)preferredScreenEdgesDeferringSystemGestures
240+
{
241+
return scDeferSystemGestures ? scDeferEdges : UIRectEdgeNone;
242+
}
243+
244+
- (void)setSystemGestureDeferralEnabled:(BOOL)enabled
245+
{
246+
scDeferSystemGestures = enabled;
247+
}
248+
249+
- (void)setSystemGestureDeferEdges:(UIRectEdge)edges
250+
{
251+
scDeferEdges = edges;
252+
}
253+
254+
- (BOOL)isSystemGestureDeferralEnabled
255+
{
256+
return scDeferSystemGestures;
257+
}
258+
259+
- (UIRectEdge)systemGestureDeferEdges
260+
{
261+
return scDeferEdges;
236262
}
237263

238264
- (void)dealloc

platform/iphone/Rtt_IPhonePlatform.mm

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1128,14 +1128,15 @@ - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
11281128
[viewController setNeedsUpdateOfHomeIndicatorAutoHidden];
11291129
}
11301130
}
1131-
else if ([k isEqualToString:@"preferredScreenEdgesDeferringSystemGestures"])
1132-
{
1133-
viewController.preferredScreenEdgesDeferringSystemGestures = lua_toboolean( L, valueIndex )?UIRectEdgeAll:UIRectEdgeNone;
1134-
if (@available(iOS 11.0, *))
1135-
{
1136-
[viewController setNeedsUpdateOfScreenEdgesDeferringSystemGestures];
1137-
}
1138-
}
1131+
else if ([k isEqualToString:@"preferredScreenEdgesDeferringSystemGestures"])
1132+
{
1133+
[viewController setSystemGestureDeferralEnabled:lua_toboolean(L, valueIndex)];
1134+
[viewController setSystemGestureDeferEdges:(UIRectEdgeTop | UIRectEdgeBottom)];
1135+
if (@available(iOS 11.0, *))
1136+
{
1137+
[viewController setNeedsUpdateOfScreenEdgesDeferringSystemGestures];
1138+
}
1139+
}
11391140
else
11401141
{
11411142
Super::SetNativeProperty(L, key, valueIndex);
@@ -1156,10 +1157,10 @@ - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
11561157
{
11571158
lua_pushboolean(L, viewController.prefersHomeIndicatorAutoHidden);
11581159
}
1159-
else if ([k isEqualToString:@"preferredScreenEdgesDeferringSystemGestures"])
1160-
{
1161-
lua_pushboolean(L, viewController.preferredScreenEdgesDeferringSystemGestures != UIRectEdgeNone);
1162-
}
1160+
else if ([k isEqualToString:@"preferredScreenEdgesDeferringSystemGestures"])
1161+
{
1162+
lua_pushboolean(L, [viewController isSystemGestureDeferralEnabled]);
1163+
}
11631164
else
11641165
{
11651166
result = Super::PushNativeProperty(L, key);

0 commit comments

Comments
 (0)