52 lines · 1.6 KB · TypeScript
RawDownload
/** * IPC Handlers for native window controls. * Used when the title bar is hidden (e.g. Windows / Linux) so the renderer * can provide conventional min / maximize / close buttons. */ import { createLogger } from '@shared/utils/logger';import { BrowserWindow, type IpcMain } from 'electron'; const logger = createLogger('IPC:window'); function getMainWindow(): BrowserWindow | null {  const win = BrowserWindow.getFocusedWindow();  if (win && !win.isDestroyed()) return win;  const all = BrowserWindow.getAllWindows();  return all.length > 0 ? all[0] : null;} export function registerWindowHandlers(ipcMain: IpcMain): void {  ipcMain.handle('window:minimize', () => {    const win = getMainWindow();    if (win && !win.isDestroyed()) win.minimize();  });   ipcMain.handle('window:maximize', () => {    const win = getMainWindow();    if (win && !win.isDestroyed()) {      if (win.isMaximized()) win.unmaximize();      else win.maximize();    }  });   ipcMain.handle('window:close', () => {    const win = getMainWindow();    if (win && !win.isDestroyed()) win.close();  });   ipcMain.handle('window:isMaximized', (): boolean => {    const win = getMainWindow();    return win != null && !win.isDestroyed() && win.isMaximized();  });   logger.info('Window handlers registered');} export function removeWindowHandlers(ipcMain: IpcMain): void {  ipcMain.removeHandler('window:minimize');  ipcMain.removeHandler('window:maximize');  ipcMain.removeHandler('window:close');  ipcMain.removeHandler('window:isMaximized');  logger.info('Window handlers removed');}