diff --git a/src/main/ipc.ts b/src/main/ipc.ts index e0bf131..69c4c8d 100644 --- a/src/main/ipc.ts +++ b/src/main/ipc.ts @@ -93,6 +93,8 @@ handle(IpcEvents.MAXIMIZE, e => { } }); +handleSync(IpcEvents.IS_MAXIMIZED, () => mainWin.isMaximized()); + handle(IpcEvents.SPELLCHECK_SET_LANGUAGES, (_, languages: string[]) => { const ses = session.defaultSession; diff --git a/src/main/mainWindow.ts b/src/main/mainWindow.ts index 62a2559..cf2dddb 100644 --- a/src/main/mainWindow.ts +++ b/src/main/mainWindow.ts @@ -359,6 +359,14 @@ function initSpellCheck(win: BrowserWindow) { win.webContents.send(IpcEvents.SPELLCHECK_RESULT, data.misspelledWord, data.dictionarySuggestions); }); } +function initMaximizedHook(win: BrowserWindow) { + win.on("maximize", () => { + win.webContents.send(IpcEvents.MAXIMIZED, true); + }); + win.on("unmaximize", () => { + win.webContents.send(IpcEvents.MAXIMIZED, false); + }); +} function createMainWindow() { // Clear up previous settings listeners @@ -425,6 +433,7 @@ function createMainWindow() { makeLinksOpenExternally(win); initSettingsListeners(win); initSpellCheck(win); + initMaximizedHook(win); win.webContents.setUserAgent(UserAgent); diff --git a/src/preload/VesktopNative.ts b/src/preload/VesktopNative.ts index 625b8c1..1b7e2a4 100644 --- a/src/preload/VesktopNative.ts +++ b/src/preload/VesktopNative.ts @@ -19,6 +19,14 @@ ipcRenderer.on(IpcEvents.SPELLCHECK_RESULT, (_, w: string, s: string[]) => { spellCheckCallbacks.forEach(cb => cb(w, s)); }); +type MaximizedCallback = (isMaximized: boolean) => void; + +const maximizedCallbacks = new Set(); + +ipcRenderer.on(IpcEvents.MAXIMIZED, (_, v: boolean) => { + maximizedCallbacks.forEach(cb => cb(v)); +}); + export const VesktopNative = { app: { relaunch: () => invoke(IpcEvents.RELAUNCH), @@ -54,7 +62,14 @@ export const VesktopNative = { focus: () => invoke(IpcEvents.FOCUS), close: (key?: string) => invoke(IpcEvents.CLOSE, key), minimize: () => invoke(IpcEvents.MINIMIZE), - maximize: () => invoke(IpcEvents.MAXIMIZE) + maximize: () => invoke(IpcEvents.MAXIMIZE), + isMaximized: () => sendSync(IpcEvents.IS_MAXIMIZED), + onMaximized(cb: MaximizedCallback) { + maximizedCallbacks.add(cb); + }, + offMaximized(cb: MaximizedCallback) { + maximizedCallbacks.delete(cb); + } }, capturer: { getLargeThumbnail: (id: string) => invoke(IpcEvents.CAPTURER_GET_LARGE_THUMBNAIL, id) diff --git a/src/shared/IpcEvents.ts b/src/shared/IpcEvents.ts index df64403..379e69d 100644 --- a/src/shared/IpcEvents.ts +++ b/src/shared/IpcEvents.ts @@ -18,6 +18,8 @@ export const enum IpcEvents { FOCUS = "VCD_FOCUS", MINIMIZE = "VCD_MINIMIZE", MAXIMIZE = "VCD_MAXIMIZE", + IS_MAXIMIZED = "VCD_IS_MAXIMIZED", + MAXIMIZED = "VCD_MAXIMIZED", SHOW_ITEM_IN_FOLDER = "VCD_SHOW_ITEM_IN_FOLDER", GET_SETTINGS = "VCD_GET_SETTINGS",