diff --git a/electron/main-dev.js b/electron/main-dev.js index 31ed132..61d5f1c 100644 --- a/electron/main-dev.js +++ b/electron/main-dev.js @@ -1,4 +1,4 @@ -const { app, BrowserWindow, ipcMain, protocol, dialog } = require('electron'); +const { app, BrowserWindow, ipcMain, protocol, dialog, shell } = require('electron'); const path = require('path'); const fs = require('fs'); const os = require('os'); @@ -885,3 +885,11 @@ app.whenReady().then(() => { app.on('window-all-closed', () => { app.quit(); }); + +ipcMain.handle('window:minimize', () => mainWindow.minimize()); +ipcMain.handle('window:maximize', () => mainWindow.maximize()); +ipcMain.handle('window:close', () => mainWindow.close()); + +ipcMain.handle('shell:openExternal', async (_, url) => { + await shell.openExternal(url); +}); diff --git a/electron/main.js b/electron/main.js index 238802e..d8c205f 100644 --- a/electron/main.js +++ b/electron/main.js @@ -1,4 +1,4 @@ -const { app, BrowserWindow, ipcMain, protocol, dialog } = require('electron'); +const { app, BrowserWindow, ipcMain, protocol, dialog, shell } = require('electron'); const path = require('path'); const fs = require('fs'); const os = require('os'); @@ -776,7 +776,13 @@ ipcMain.handle('window:close', () => { BrowserWindow.getFocusedWindow()?.close(); }); -// Keep old handlers for backward compatibility during transition +// Shell handlers +ipcMain.handle('shell:openExternal', async (_, url) => { + await shell.openExternal(url); +}); + +// Profile handlers +{{ ... }} let mainWindow; let splashScreen; diff --git a/electron/preload.js b/electron/preload.js index 8061899..70c791a 100644 --- a/electron/preload.js +++ b/electron/preload.js @@ -137,9 +137,20 @@ contextBridge.exposeInMainWorld('electron', { removeListener: (channel, listener) => ipcRenderer.removeListener(channel, listener) }, window: { - minimize: () => ipcRenderer.invoke('window:minimize'), - maximize: () => ipcRenderer.invoke('window:maximize'), - close: () => ipcRenderer.invoke('window:close'), + minimize() { + return ipcRenderer.invoke('window:minimize'); + }, + maximize() { + return ipcRenderer.invoke('window:maximize'); + }, + close() { + return ipcRenderer.invoke('window:close'); + } + }, + shell: { + openExternal(url) { + return ipcRenderer.invoke('shell:openExternal', url); + } }, functionNodes: { save: async (baseDir, profileId, config) => { diff --git a/src/app/layouts/header/header.component.ts b/src/app/layouts/header/header.component.ts index 7f904e0..53ff661 100644 --- a/src/app/layouts/header/header.component.ts +++ b/src/app/layouts/header/header.component.ts @@ -26,7 +26,7 @@ import { Subscription } from 'rxjs';