chore: finalize electron desktop migration

This commit is contained in:
Mohamed Boudra
2026-03-21 01:50:00 +07:00
parent 77fb74c188
commit 111576e2ca
169 changed files with 6463 additions and 13191 deletions
+92
View File
@@ -0,0 +1,92 @@
import { app, Menu, BrowserWindow } from "electron";
function withBrowserWindow(
callback: (win: BrowserWindow) => void
): (_item: Electron.MenuItem, baseWin: Electron.BaseWindow | undefined) => void {
return (_item, baseWin) => {
const win = baseWin instanceof BrowserWindow ? baseWin : BrowserWindow.getFocusedWindow();
if (win) callback(win);
};
}
export function setupApplicationMenu(): void {
const isMac = process.platform === "darwin";
const template: Electron.MenuItemConstructorOptions[] = [
...(isMac
? [
{
label: app.name,
submenu: [
{ role: "about" as const },
{ type: "separator" as const },
{ role: "services" as const },
{ type: "separator" as const },
{ role: "hide" as const },
{ role: "hideOthers" as const },
{ role: "unhide" as const },
{ type: "separator" as const },
{ role: "quit" as const },
],
},
]
: []),
{
label: "Edit",
submenu: [
{ role: "undo" },
{ role: "redo" },
{ type: "separator" },
{ role: "cut" },
{ role: "copy" },
{ role: "paste" },
{ role: "selectAll" },
],
},
{
label: "View",
submenu: [
{
label: "Zoom In",
accelerator: "CmdOrCtrl+=",
click: withBrowserWindow((win) => {
win.webContents.setZoomLevel(win.webContents.getZoomLevel() + 0.5);
}),
},
{
label: "Zoom Out",
accelerator: "CmdOrCtrl+-",
click: withBrowserWindow((win) => {
win.webContents.setZoomLevel(win.webContents.getZoomLevel() - 0.5);
}),
},
{
label: "Actual Size",
accelerator: "CmdOrCtrl+0",
click: withBrowserWindow((win) => {
win.webContents.setZoomLevel(0);
}),
},
{ type: "separator" },
{ role: "reload" },
{ role: "forceReload" },
{ role: "toggleDevTools" },
{ type: "separator" },
{ role: "togglefullscreen" },
],
},
{
label: "Window",
submenu: [
{ role: "minimize" },
{ role: "zoom" },
...(isMac
? [{ type: "separator" as const }, { role: "front" as const }]
: [{ role: "close" as const }]),
],
},
];
const menu = Menu.buildFromTemplate(template);
Menu.setApplicationMenu(menu);
}