From 09349ebdef377d3839fdf07a3a925e3a7a80bb00 Mon Sep 17 00:00:00 2001 From: TrueZhuanjia Date: Thu, 10 Jul 2025 22:10:48 +0800 Subject: [PATCH] disable gyro mode selector when it's unable to perform in-stream hot switch --- VoidLink/Input/ControllerSupport.h | 2 ++ VoidLink/Input/ControllerSupport.m | 13 ++++++++++--- VoidLink/ViewControllers/MainFrameViewController.m | 2 ++ .../ViewControllers/StreamFrameViewController.h | 1 + .../ViewControllers/StreamFrameViewController.m | 4 ++++ 5 files changed, 19 insertions(+), 3 deletions(-) diff --git a/VoidLink/Input/ControllerSupport.h b/VoidLink/Input/ControllerSupport.h index 6a26b31f..bde2d8e2 100644 --- a/VoidLink/Input/ControllerSupport.h +++ b/VoidLink/Input/ControllerSupport.h @@ -21,6 +21,8 @@ @interface ControllerSupport : NSObject +@property (readonly) bool shallDisableGyroHotSwitch; + -(id) initWithConfig:(StreamConfiguration*)streamConfig delegate:(id)delegate; -(void) connectionEstablished; diff --git a/VoidLink/Input/ControllerSupport.m b/VoidLink/Input/ControllerSupport.m index 47f1d2b2..7a5bd8d6 100644 --- a/VoidLink/Input/ControllerSupport.m +++ b/VoidLink/Input/ControllerSupport.m @@ -25,6 +25,13 @@ static const double MOUSE_SPEED_DIVISOR = 1.25; +@interface ControllerSupport() + +@property (assign,nonatomic) bool shallDisableGyroHotSwitch; + +@end + + @implementation ControllerSupport { id _controllerConnectObserver; id _controllerDisconnectObserver; @@ -1388,7 +1395,6 @@ static const double MOUSE_SPEED_DIVISOR = 1.25; _activeGCControllers = [[NSMutableSet alloc] init]; _controllerNumbers = 0; - _captureMouse = (streamConfig.localMousePointerMode == 0); if (@available(iOS 14.0, tvOS 14.0, *)) { for (GCMouse* mouse in [GCMouse mice]) { @@ -1538,8 +1544,8 @@ static const double MOUSE_SPEED_DIVISOR = 1.25; [self assignControllers]; - //[self updateConfig:streamConfig delegate:delegate]; - + _shallDisableGyroHotSwitch = streamConfig.gyroMode == GyroModeOff && _voidControllers.allValues.count == 0; + NSLog(@"shallDisableGyroHotSwitch %d", _shallDisableGyroHotSwitch); return self; } @@ -1551,6 +1557,7 @@ static const double MOUSE_SPEED_DIVISOR = 1.25; return false; } + -(void)connectionEstablished { for (VoidController* voidController in _voidControllers.allValues) { [self updateFinished:voidController]; diff --git a/VoidLink/ViewControllers/MainFrameViewController.m b/VoidLink/ViewControllers/MainFrameViewController.m index 8d1fc166..b7fbc4dc 100644 --- a/VoidLink/ViewControllers/MainFrameViewController.m +++ b/VoidLink/ViewControllers/MainFrameViewController.m @@ -1135,10 +1135,12 @@ static NSMutableSet* hostList; [settingsViewController.codecSelector setEnabled:!_settingsExpandedInStreamView]; [settingsViewController.yuv444Switch setEnabled:!_settingsExpandedInStreamView]; [settingsViewController.hdrSwitch setEnabled:!_settingsExpandedInStreamView]; + [settingsViewController.gyroModeSelector setEnabled:!_settingsExpandedInStreamView || ![streamFrameViewController shallDisableGyroHotSwitch]]; [settingsViewController setHidden:_settingsExpandedInStreamView forStack:settingsViewController.framepacingStack]; [settingsViewController setHidden:_settingsExpandedInStreamView forStack:settingsViewController.citrixX1MouseStack]; [settingsViewController setHidden:_settingsExpandedInStreamView forStack:settingsViewController.externalDisplayModeStack]; [settingsViewController setHidden:_settingsExpandedInStreamView forStack:settingsViewController.audioConfigStack]; + } - (void)revealController:(SWRevealViewController *)revealController didMoveToPosition:(FrontViewPosition)position { diff --git a/VoidLink/ViewControllers/StreamFrameViewController.h b/VoidLink/ViewControllers/StreamFrameViewController.h index a71c0d64..47c6c06c 100644 --- a/VoidLink/ViewControllers/StreamFrameViewController.h +++ b/VoidLink/ViewControllers/StreamFrameViewController.h @@ -32,5 +32,6 @@ -(void)updatePreferredDisplayMode:(BOOL)streamActive; -(void)reConfigStreamViewRealtime; - (void)setUserInteractionEnabledForStreamView:(bool)enabled; +- (bool)shallDisableGyroHotSwitch; @end diff --git a/VoidLink/ViewControllers/StreamFrameViewController.m b/VoidLink/ViewControllers/StreamFrameViewController.m index 4d0de6fc..85188a3c 100644 --- a/VoidLink/ViewControllers/StreamFrameViewController.m +++ b/VoidLink/ViewControllers/StreamFrameViewController.m @@ -670,6 +670,10 @@ } } +- (bool)shallDisableGyroHotSwitch{ + return _controllerSupport.shallDisableGyroHotSwitch; +} + - (BOOL) isAirPlaying{ return _extWindow != nil && _extWindow.hidden == NO; }