From 749ac64698e3216494a0ff3b2f3caf6f5209e0d9 Mon Sep 17 00:00:00 2001 From: MingLLuo Date: Fri, 17 Jan 2025 08:43:55 +0800 Subject: [PATCH] Fix repeated reboots when useWindowFrame switch (#457) - add debounce / statelock(isRelaunching) to avoid multiple restarts due to rapid consecutive clicks. --- .../src/components/settings/general-config.tsx | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/renderer/src/components/settings/general-config.tsx b/src/renderer/src/components/settings/general-config.tsx index c595074f..8c3288c4 100644 --- a/src/renderer/src/components/settings/general-config.tsx +++ b/src/renderer/src/components/settings/general-config.tsx @@ -23,6 +23,7 @@ import { writeTheme } from '@renderer/utils/ipc' import { useAppConfig } from '@renderer/hooks/use-app-config' +import debounce from '@renderer/utils/debounce' import { platform } from '@renderer/utils/init' import { useTheme } from 'next-themes' import { IoIosHelpCircle, IoMdCloudDownload } from 'react-icons/io' @@ -35,6 +36,7 @@ const GeneralConfig: React.FC = () => { const [customThemes, setCustomThemes] = useState<{ key: string; label: string }[]>() const [openCSSEditor, setOpenCSSEditor] = useState(false) const [fetching, setFetching] = useState(false) + const [isRelaunching, setIsRelaunching] = useState(false) const { setTheme } = useTheme() const { silentStart = false, @@ -270,10 +272,18 @@ const GeneralConfig: React.FC = () => { { - await patchAppConfig({ useWindowFrame: v }) - await relaunchApp() - }} + isDisabled={isRelaunching} + onValueChange={debounce(async (v) => { + if (isRelaunching) return + setIsRelaunching(true) + try { + await patchAppConfig({ useWindowFrame: v }) + await relaunchApp() + } catch (e) { + alert(e) + setIsRelaunching(false) + } + }, 1000)} />