feat(GamesupportProvider): add enabled prop to start/stop gamepad support

This commit is contained in:
Botzy 2025-03-24 17:09:09 +02:00
parent c97c41f11c
commit 5927b17e87
2 changed files with 13 additions and 4 deletions

View file

@ -22,6 +22,7 @@ const App = () => {
const { i18n } = useTranslation();
const shell = useShell();
const [windowHidden, setWindowHidden] = React.useState(false);
const [gamepadSupportEnabled, setGamepadSupportEnabled] = React.useState(false);
const onPathNotMatch = React.useCallback(() => {
return NotFound;
}, []);
@ -133,6 +134,10 @@ const App = () => {
i18n.changeLanguage(args.settings.interfaceLanguage);
}
if (args?.settings?.gamepadSupport !== undefined) {
setGamepadSupportEnabled(args.settings.gamepadSupport);
}
if (args?.settings?.quitOnClose && windowHidden) {
shell.send('quit');
}
@ -146,6 +151,10 @@ const App = () => {
i18n.changeLanguage(state.profile.settings.interfaceLanguage);
}
if (typeof state.profile.settings.gamepadSupport === 'boolean') {
setGamepadSupportEnabled(state.profile.settings.gamepadSupport);
}
if (state?.profile?.settings?.quitOnClose && windowHidden) {
shell.send('quit');
}
@ -204,7 +213,7 @@ const App = () => {
<ToastProvider className={styles['toasts-container']}>
<TooltipProvider className={styles['tooltip-container']}>
<FileDropProvider className={styles['file-drop-container']}>
<GamepadProvider>
<GamepadProvider enabled={gamepadSupportEnabled}>
<ServicesToaster />
<DeepLinkHandler />
<SearchParamsHandler />

View file

@ -8,7 +8,8 @@ import GamepadContext from './GamepadContext';
type GamepadEventHandlers = Record<string, ((data?: any) => void)[]>;
const GamepadProvider: React.FC<{ children: React.ReactNode }> = ({
const GamepadProvider: React.FC<{ enabled: boolean; children: React.ReactNode }> = ({
enabled,
children,
}) => {
const [connectedGamepads, setConnectedGamepads] = useState<number>(0);
@ -44,8 +45,7 @@ const GamepadProvider: React.FC<{ children: React.ReactNode }> = ({
let animationFrameId: number;
const updateStatus = () => {
// TODO: add check if profile settings allows this feature
if (document.hasFocus()) {
if (enabled && document.hasFocus()) {
const currentTime = Date.now();
const controllers = Array.from(navigator.getGamepads()).filter(
(gp) => gp !== null