fix: add native menu for copy link, close #822

Signed-off-by: Innei <i@innei.in>
This commit is contained in:
Innei 2024-10-09 15:38:27 +08:00
parent dd0364d1a9
commit 5e91f19b18
No known key found for this signature in database
GPG Key ID: 0F62D33977F021F7
1 changed files with 49 additions and 37 deletions

View File

@ -1,52 +1,64 @@
import type { BrowserWindow } from "electron"
import { Menu } from "electron"
import { clipboard, Menu } from "electron"
import { t } from "./i18n"
export const registerContextMenu = (window: BrowserWindow) => {
const handler = (_event: Electron.Event, props: Electron.ContextMenuParams) => {
const { selectionText, isEditable } = props
const selectionMenu = Menu.buildFromTemplate([
{ role: "copy", label: t("menu.copy"), accelerator: "CmdOrCtrl+C" },
{ type: "separator" },
{ role: "selectAll", label: t("menu.selectAll"), accelerator: "CmdOrCtrl+A" },
])
const inputMenu = Menu.buildFromTemplate([
{ role: "undo", label: t("menu.undo"), accelerator: "CmdOrCtrl+Z" },
{
role: "redo",
label: t("menu.redo"),
accelerator: "CmdOrCtrl+Shift+Z",
},
{ type: "separator" },
{
role: "cut",
label: t("menu.cut"),
accelerator: "CmdOrCtrl+X",
},
{
role: "copy",
label: t("menu.copy"),
accelerator: "CmdOrCtrl+C",
},
{
role: "paste",
label: t("menu.paste"),
accelerator: "CmdOrCtrl+V",
},
{
type: "separator",
},
{ role: "selectAll", label: t("menu.selectAll"), accelerator: "CmdOrCtrl+A" },
])
const { selectionText, isEditable, linkURL } = props
if (isEditable) {
const inputMenu = Menu.buildFromTemplate([
{ role: "undo", label: t("menu.undo"), accelerator: "CmdOrCtrl+Z" },
{
role: "redo",
label: t("menu.redo"),
accelerator: "CmdOrCtrl+Shift+Z",
},
{ type: "separator" },
{
role: "cut",
label: t("menu.cut"),
accelerator: "CmdOrCtrl+X",
},
{
role: "copy",
label: t("menu.copy"),
accelerator: "CmdOrCtrl+C",
},
{
role: "paste",
label: t("menu.paste"),
accelerator: "CmdOrCtrl+V",
},
{
type: "separator",
},
{ role: "selectAll", label: t("menu.selectAll"), accelerator: "CmdOrCtrl+A" },
])
inputMenu.popup({
window,
})
} else if (linkURL) {
const linkMenu = Menu.buildFromTemplate([
{ role: "copy", label: t("menu.copy"), accelerator: "CmdOrCtrl+C" },
// Copy link
{
label: t("contextMenu.copyLink"),
accelerator: "CmdOrCtrl+Shift+C",
click: () => {
clipboard.writeText(linkURL)
},
},
])
linkMenu.popup({ window })
} else if (selectionText && selectionText.trim() !== "") {
const selectionMenu = Menu.buildFromTemplate([
{ role: "copy", label: t("menu.copy"), accelerator: "CmdOrCtrl+C" },
{ type: "separator" },
{ role: "selectAll", label: t("menu.selectAll"), accelerator: "CmdOrCtrl+A" },
])
selectionMenu.popup({ window })
}
}