84 lines
2 KiB
TypeScript
84 lines
2 KiB
TypeScript
import { BrowserWindow } from "electron"
|
|
import type { DesktopMenuAction } from "@opencode-ai/app/desktop-menu"
|
|
import { createMainWindow, updateTitlebar } from "./windows"
|
|
|
|
export type DesktopMenuActionHandlers = Partial<{
|
|
checkForUpdates: () => void
|
|
relaunch: () => void
|
|
}>
|
|
|
|
export function runDesktopMenuAction(
|
|
win: BrowserWindow | null,
|
|
action: DesktopMenuAction,
|
|
handlers: DesktopMenuActionHandlers = {},
|
|
) {
|
|
switch (action) {
|
|
case "app.checkForUpdates":
|
|
handlers.checkForUpdates?.()
|
|
return
|
|
case "app.relaunch":
|
|
handlers.relaunch?.()
|
|
return
|
|
case "window.new":
|
|
createMainWindow()
|
|
return
|
|
case "window.close":
|
|
win?.close()
|
|
return
|
|
case "window.minimize":
|
|
win?.minimize()
|
|
return
|
|
case "window.toggleMaximize":
|
|
if (win?.isMaximized()) {
|
|
win.unmaximize()
|
|
return
|
|
}
|
|
win?.maximize()
|
|
return
|
|
case "view.reload":
|
|
win?.reload()
|
|
return
|
|
case "view.toggleDevTools":
|
|
win?.webContents.toggleDevTools()
|
|
return
|
|
case "view.resetZoom":
|
|
setZoom(win, 1)
|
|
return
|
|
case "view.zoomIn":
|
|
setZoom(win, (win?.webContents.getZoomFactor() ?? 1) + 0.2)
|
|
return
|
|
case "view.zoomOut":
|
|
setZoom(win, (win?.webContents.getZoomFactor() ?? 1) - 0.2)
|
|
return
|
|
case "view.toggleFullscreen":
|
|
win?.setFullScreen(!win.isFullScreen())
|
|
return
|
|
case "edit.undo":
|
|
win?.webContents.undo()
|
|
return
|
|
case "edit.redo":
|
|
win?.webContents.redo()
|
|
return
|
|
case "edit.cut":
|
|
win?.webContents.cut()
|
|
return
|
|
case "edit.copy":
|
|
win?.webContents.copy()
|
|
return
|
|
case "edit.paste":
|
|
win?.webContents.paste()
|
|
return
|
|
case "edit.delete":
|
|
win?.webContents.delete()
|
|
return
|
|
case "edit.selectAll":
|
|
win?.webContents.selectAll()
|
|
return
|
|
}
|
|
}
|
|
|
|
function setZoom(win: BrowserWindow | null, value: number) {
|
|
if (!win) return
|
|
win.webContents.setZoomFactor(Math.min(Math.max(value, 0.2), 10))
|
|
updateTitlebar(win)
|
|
}
|