diff --git a/Limelight/Base.lproj/iPad.storyboard b/Limelight/Base.lproj/iPad.storyboard
index e43c3bc3..4bf8c776 100644
--- a/Limelight/Base.lproj/iPad.storyboard
+++ b/Limelight/Base.lproj/iPad.storyboard
@@ -567,6 +567,7 @@ ICAgICAgICAgICAgICA
+
@@ -995,13 +996,13 @@ ICAgICAgICAgICAgICA
-
+
-
+
diff --git a/Limelight/Base.lproj/iPhone.storyboard b/Limelight/Base.lproj/iPhone.storyboard
index d632b6de..bc5638ac 100644
--- a/Limelight/Base.lproj/iPhone.storyboard
+++ b/Limelight/Base.lproj/iPhone.storyboard
@@ -576,6 +576,7 @@ ICAgICAgICAgICAgIA
+
diff --git a/Limelight/Input/StreamView.h b/Limelight/Input/StreamView.h
index 5006026b..8b8709d2 100644
--- a/Limelight/Input/StreamView.h
+++ b/Limelight/Input/StreamView.h
@@ -17,7 +17,7 @@
- (void) userInteractionEnded;
- (void) streamExitRequested;
- (void) toggleStatsOverlay;
-- (void) toggleMouseCapture;
+- (void) localMousePointerMode;
- (void) toggleMouseVisible;
@end
diff --git a/Limelight/Input/StreamView.m b/Limelight/Input/StreamView.m
index 90c7fb99..6c3be13f 100644
--- a/Limelight/Input/StreamView.m
+++ b/Limelight/Input/StreamView.m
@@ -775,7 +775,7 @@ static const double X1_MOUSE_SPEED_DIVISOR = 2.5;
[interactionDelegate toggleStatsOverlay];
break;
case UIKeyboardHIDUsageKeyboardM:
- [interactionDelegate toggleMouseCapture];
+ [interactionDelegate localMousePointerMode];
break;
case UIKeyboardHIDUsageKeyboardC:
[interactionDelegate toggleMouseVisible];
diff --git a/Limelight/Limelight-Info.plist b/Limelight/Limelight-Info.plist
index 541e31d5..f29ea4d0 100644
--- a/Limelight/Limelight-Info.plist
+++ b/Limelight/Limelight-Info.plist
@@ -74,7 +74,7 @@
armv7
UIRequiresFullScreen
-
+
UIStatusBarHidden
UISupportedInterfaceOrientations
diff --git a/Limelight/ViewControllers/MainFrameViewController.m b/Limelight/ViewControllers/MainFrameViewController.m
index 46407d96..8887e147 100644
--- a/Limelight/ViewControllers/MainFrameViewController.m
+++ b/Limelight/ViewControllers/MainFrameViewController.m
@@ -950,6 +950,7 @@ static NSMutableSet* hostList;
[settingsViewController.hdrSelector setEnabled:!self.settingsExpandedInStreamView];
[settingsViewController.framePacingSelector setEnabled:!self.settingsExpandedInStreamView];
[settingsViewController.btMouseSelector setEnabled:!self.settingsExpandedInStreamView];
+ [settingsViewController.externalDisplayModeSelector setEnabled:!self.settingsExpandedInStreamView];
[settingsViewController.goBackToStreamViewButton setEnabled:self.settingsExpandedInStreamView];
[settingsViewController.allowPortraitSelector setEnabled:!self.settingsExpandedInStreamView && [self isFullScreenRequired]];//need "requires fullscreen" enabled in the app bunddle to make runtime orientation limitation woring
diff --git a/Limelight/ViewControllers/StreamFrameViewController.m b/Limelight/ViewControllers/StreamFrameViewController.m
index e421b2ee..584368f2 100644
--- a/Limelight/ViewControllers/StreamFrameViewController.m
+++ b/Limelight/ViewControllers/StreamFrameViewController.m
@@ -199,8 +199,14 @@
[self prepExtScreen:UIScreen.screens.lastObject];
}
else {
+ /*
+ _settings.externalDisplayMode.intValue:
+ 0 - stage manager
+ 1 - airplay
+ 2 - disabled
+ */
dispatch_async(dispatch_get_main_queue(), ^{
- [self->_streamView insertSubview:self->_streamVideoRenderView atIndex:0];
+ if(self->_settings.externalDisplayMode.intValue != 2) [self->_streamView insertSubview:self->_streamVideoRenderView atIndex:0];
});
}
@@ -275,10 +281,21 @@
_controllerSupport = [[ControllerSupport alloc] initWithConfig:self.streamConfig delegate:self];
_inactivityTimer = nil;
- _streamVideoRenderView = (StreamView*)[[UIView alloc] initWithFrame:self.view.frame];
_streamView = [[StreamView alloc] initWithFrame:self.view.frame];
- _streamVideoRenderView.bounds = _streamView.bounds;
- _streamVideoRenderView.userInteractionEnabled = false; // this will prevent renderView from intrecepting touchEvents which shall be interacting with streamView
+
+ /*
+ _settings.externalDisplayMode.intValue:
+ 0 - stage manager
+ 1 - airplay
+ 2 - disabled
+ */
+ if(_settings.externalDisplayMode.intValue == 2) _streamVideoRenderView = _streamView;
+ else {
+ NSLog(@"renderView separated from streamView");
+ _streamVideoRenderView = (StreamView*)[[UIView alloc] initWithFrame:self.view.frame];
+ _streamVideoRenderView.bounds = _streamView.bounds;
+ _streamVideoRenderView.userInteractionEnabled = false; // this will prevent renderView from intrecepting touchEvents which shall be interacting with streamView
+ }
//[_streamView setupStreamView:_controllerSupport interactionDelegate:self config:self.streamConfig];
[self reConfigStreamViewRealtime]; // call this method again to make sure all gestures are configured & added to the superview(self.view), including the gestures added from inside the streamview.
@@ -552,7 +569,13 @@
Log(LOG_I, @"Removing External Screen");
_extWindow.hidden = YES;
[self handleViewResize];
- [_streamView insertSubview:_streamVideoRenderView atIndex:0];
+ /*
+ _settings.externalDisplayMode.intValue:
+ 0 - stage manager
+ 1 - airplay
+ 2 - disabled
+ */
+ if(_settings.externalDisplayMode.intValue != 2) [_streamView insertSubview:_streamVideoRenderView atIndex:0];
}
- (void) handleViewResize{
@@ -963,6 +986,7 @@
currentSettings.localMousePointerMode = @0;
}
+
[dataMan saveData];
[self reConfigStreamViewRealtime];
}
diff --git a/Limelight/mul.lproj/iPad.xcstrings b/Limelight/mul.lproj/iPad.xcstrings
index e5a7a94f..fa62bc5f 100644
--- a/Limelight/mul.lproj/iPad.xcstrings
+++ b/Limelight/mul.lproj/iPad.xcstrings
@@ -2401,6 +2401,36 @@
}
}
},
+ "VWB-YB-Ptj.segmentTitles[2]" : {
+ "comment" : "Class = \"UISegmentedControl\"; VWB-YB-Ptj.segmentTitles[2] = \"Disabled\"; ObjectID = \"VWB-YB-Ptj\";",
+ "extractionState" : "extracted_with_value",
+ "localizations" : {
+ "en" : {
+ "stringUnit" : {
+ "state" : "new",
+ "value" : "Disabled"
+ }
+ },
+ "zh-Hans" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "禁用"
+ }
+ },
+ "zh-Hant" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "禁用"
+ }
+ },
+ "zh-HK" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "禁用"
+ }
+ }
+ }
+ },
"WDY-9o-6Hb.segmentTitles[0]" : {
"comment" : "Class = \"UISegmentedControl\"; WDY-9o-6Hb.segmentTitles[0] = \"No\"; ObjectID = \"WDY-9o-6Hb\";",
"extractionState" : "extracted_with_value",
diff --git a/Limelight/mul.lproj/iPhone.xcstrings b/Limelight/mul.lproj/iPhone.xcstrings
index 31a72819..6b064ecd 100644
--- a/Limelight/mul.lproj/iPhone.xcstrings
+++ b/Limelight/mul.lproj/iPhone.xcstrings
@@ -2221,6 +2221,36 @@
}
}
},
+ "VWB-YB-Ptj.segmentTitles[2]" : {
+ "comment" : "Class = \"UISegmentedControl\"; VWB-YB-Ptj.segmentTitles[2] = \"Disabled\"; ObjectID = \"VWB-YB-Ptj\";",
+ "extractionState" : "extracted_with_value",
+ "localizations" : {
+ "en" : {
+ "stringUnit" : {
+ "state" : "new",
+ "value" : "Disabled"
+ }
+ },
+ "zh-Hans" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "禁用"
+ }
+ },
+ "zh-Hant" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "禁用"
+ }
+ },
+ "zh-HK" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "禁用"
+ }
+ }
+ }
+ },
"WGf-9d-eAm.segmentTitles[0]" : {
"comment" : "Class = \"UISegmentedControl\"; WGf-9d-eAm.segmentTitles[0] = \"Off\"; ObjectID = \"WGf-9d-eAm\";",
"extractionState" : "extracted_with_value",