diff --git a/electron/main/index.ts b/electron/main/index.ts index 941d8a1e..6f5a7a53 100644 --- a/electron/main/index.ts +++ b/electron/main/index.ts @@ -876,6 +876,14 @@ app.whenReady().then(() => { }); }); +ipcMain.handle('window:state', () => { + const win = BrowserWindow.getFocusedWindow() + if (!win) return 'normal' + if (win.isMaximized()) return 'maximized' + if (win.isMinimized()) return 'minimized' + return 'normal' +}) + // New window example arg: new windows url // ipcMain.handle('open-win', (_, arg) => { // const childWindow = new BrowserWindow({ diff --git a/electron/preload/index.ts b/electron/preload/index.ts index da219272..27f490b5 100644 --- a/electron/preload/index.ts +++ b/electron/preload/index.ts @@ -51,6 +51,7 @@ type WindowControlBridge = { minimize: () => void; toggleMaximize: () => void; close: () => void; + state: () => Promise<| 'normal' | 'maximized' | 'minimized'>; }; type UpdateCenterStateListener = (snapshot: UpdateCenterSnapshot) => void; @@ -110,6 +111,7 @@ contextBridge.exposeInMainWorld("windowControls", { minimize: () => ipcRenderer.send("window-control-minimize"), toggleMaximize: () => ipcRenderer.send("window-control-toggle-maximize"), close: () => ipcRenderer.send("window-control-close"), + state: () => ipcRenderer.invoke("window:state"), } satisfies WindowControlBridge); contextBridge.exposeInMainWorld("updateCenter", { diff --git a/src/App.vue b/src/App.vue index d5bb3b55..ff74079f 100644 --- a/src/App.vue +++ b/src/App.vue @@ -14,6 +14,7 @@ @toggle-theme="toggleTheme" @toggle-sidebar="isSidebarOpen = !isSidebarOpen" @spk-link="handleSpkLink" + :is-maximized="isMaximized" />