feat(desktop): support multiple windows

Closes #250
This commit is contained in:
Arielle Ostankova
2026-06-05 21:08:24 +08:00
committed by GitHub
parent 1377adbece
commit df635b570a
12 changed files with 362 additions and 62 deletions
+23 -3
View File
@@ -6,6 +6,10 @@ interface ShowContextMenuInput {
hasSelection?: boolean;
}
interface ApplicationMenuOptions {
onNewWindow: () => void;
}
function withBrowserWindow(
callback: (win: BrowserWindow) => void,
): (_item: Electron.MenuItem, baseWin: Electron.BaseWindow | undefined) => void {
@@ -41,10 +45,12 @@ function reloadFocusedContentsOrWindow(win: BrowserWindow, options?: { ignoreCac
win.webContents.reload();
}
export function setupApplicationMenu(): void {
function buildApplicationMenuTemplate(
options: ApplicationMenuOptions,
): Electron.MenuItemConstructorOptions[] {
const isMac = process.platform === "darwin";
const template: Electron.MenuItemConstructorOptions[] = [
return [
...(isMac
? [
{
@@ -63,6 +69,18 @@ export function setupApplicationMenu(): void {
},
]
: []),
{
label: "File",
submenu: [
{
label: "New Window",
accelerator: "CmdOrCtrl+Shift+N",
click: () => {
options.onNewWindow();
},
},
],
},
{
label: "Edit",
submenu: [
@@ -130,8 +148,10 @@ export function setupApplicationMenu(): void {
],
},
];
}
const menu = Menu.buildFromTemplate(template);
export function setupApplicationMenu(options: ApplicationMenuOptions): void {
const menu = Menu.buildFromTemplate(buildApplicationMenuTemplate(options));
Menu.setApplicationMenu(menu);
ipcMain.handle("paseo:menu:showContextMenu", (event, input?: ShowContextMenuInput) => {