fix: built-in gyro not working when resuming stream

This commit is contained in:
Acaki committed 2025-07-09 14:17:29 +08:00
1 parent 994a60c8a4
commit 0047bfe51f
1 file changed
+20 -12
+20 -12
View File
@@ -1588,25 +1588,33 @@ static const double MOUSE_SPEED_DIVISOR = 1.25;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)),
dispatch_get_main_queue(), ^{ dispatch_get_main_queue(), ^{
// Stop all existing timers to ensure a clean state.
[self stopTimerForAllControllers];
// Read the user's final setting from the stream configuration.
self->_gyroMode = self->_streamConfig.gyroMode; self->_gyroMode = self->_streamConfig.gyroMode;
switch (self->_gyroMode) { switch (self->_gyroMode) {
case AlwaysController: case AlwaysController:
[self stopTimerForAllControllers]; for (VoidController* voidController in self->_voidControllers.allValues) {
for(VoidController* voidController in self->_voidControllers.allValues) [self updateTimerStateForController:voidController]; [self updateTimerStateForController:voidController];
break;
case GyroModeAuto:
if(self->_voidControllers.count == 0) [self assignControllers];
if(self->_voidControllers.count == 0 || ![self externalControllersHaveGyro]) nil;
else{
[self stopTimerForAllControllers];
for(VoidController* voidController in self->_voidControllers.allValues) [self updateTimerStateForController:voidController];
} }
break; break;
case GyroModeOff: case GyroModeAuto:
[self stopTimerForAllControllers]; if ([self externalControllersHaveGyro]) {
for (VoidController* voidController in self->_voidControllers.allValues) {
[self updateTimerStateForController:voidController];
}
} else {
[self updateTimerStateForController:self->_oscController];
}
break; break;
default:
case AlwaysDevice:
[self updateTimerStateForController:self->_oscController];
break;
case GyroModeOff:
break; break;
} }
}); });