From 1ee57f1385c7382530055f1e292dfd1c7a420eb9 Mon Sep 17 00:00:00 2001 From: Phantom <59059173+EurFelux@users.noreply.github.com> Date: Sun, 31 Aug 2025 18:17:16 +0800 Subject: [PATCH] feat(window): check fullscreen state when useFullScreen mounted (#9719) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit feat(全屏): 添加检查窗口是否全屏的功能 实现通过IPC通道检查主窗口全屏状态的功能,并在渲染进程首次加载时获取当前状态 --- packages/shared/IpcChannel.ts | 1 + src/main/ipc.ts | 4 ++++ src/preload/index.ts | 1 + src/renderer/src/hooks/useFullscreen.ts | 5 +++++ 4 files changed, 11 insertions(+) diff --git a/packages/shared/IpcChannel.ts b/packages/shared/IpcChannel.ts index 26e6a2764a..c5b7c6ec4e 100644 --- a/packages/shared/IpcChannel.ts +++ b/packages/shared/IpcChannel.ts @@ -36,6 +36,7 @@ export enum IpcChannel { App_LogToMain = 'app:log-to-main', App_SaveData = 'app:save-data', App_SetFullScreen = 'app:set-full-screen', + App_IsFullScreen = 'app:is-full-screen', App_MacIsProcessTrusted = 'app:mac-is-process-trusted', App_MacRequestProcessTrust = 'app:mac-request-process-trust', diff --git a/src/main/ipc.ts b/src/main/ipc.ts index 365b6173cd..97aedd83ce 100644 --- a/src/main/ipc.ts +++ b/src/main/ipc.ts @@ -206,6 +206,10 @@ export function registerIpc(mainWindow: BrowserWindow, app: Electron.App) { mainWindow.setFullScreen(value) }) + ipcMain.handle(IpcChannel.App_IsFullScreen, (): boolean => { + return mainWindow.isFullScreen() + }) + ipcMain.handle(IpcChannel.Config_Set, (_, key: string, value: any, isNotify: boolean = false) => { configManager.set(key, value, isNotify) }) diff --git a/src/preload/index.ts b/src/preload/index.ts index 0f3c358962..2244264753 100644 --- a/src/preload/index.ts +++ b/src/preload/index.ts @@ -81,6 +81,7 @@ const api = { logToMain: (source: LogSourceWithContext, level: LogLevel, message: string, data: any[]) => ipcRenderer.invoke(IpcChannel.App_LogToMain, source, level, message, data), setFullScreen: (value: boolean): Promise => ipcRenderer.invoke(IpcChannel.App_SetFullScreen, value), + isFullScreen: (): Promise => ipcRenderer.invoke(IpcChannel.App_IsFullScreen), mac: { isProcessTrusted: (): Promise => ipcRenderer.invoke(IpcChannel.App_MacIsProcessTrusted), requestProcessTrust: (): Promise => ipcRenderer.invoke(IpcChannel.App_MacRequestProcessTrust) diff --git a/src/renderer/src/hooks/useFullscreen.ts b/src/renderer/src/hooks/useFullscreen.ts index 4a5820ed8e..0a86d31998 100644 --- a/src/renderer/src/hooks/useFullscreen.ts +++ b/src/renderer/src/hooks/useFullscreen.ts @@ -5,6 +5,11 @@ export function useFullscreen() { const [isFullscreen, setIsFullscreen] = useState(false) useEffect(() => { + // 首次挂载时请求一次状态 + window.api.isFullScreen().then((value) => { + setIsFullscreen(value) + }) + const cleanup = window.electron.ipcRenderer.on(IpcChannel.FullscreenStatusChanged, (_, fullscreen) => { setIsFullscreen(fullscreen) })