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",