diff --git a/src/main/modules/commands/index.ts b/src/main/modules/commands/index.ts index 0bdfe56..b5d1727 100644 --- a/src/main/modules/commands/index.ts +++ b/src/main/modules/commands/index.ts @@ -79,8 +79,7 @@ export default class Commands extends BaseClass { this.sendMessage(name, `popup_menu_close:${options.menu_id}`) // broadcast(`popup_menu_close:${options.menu_id}`) }) - - menu.popup() + menu.popup(options.popupOptions) }) } diff --git a/src/renderer/src/bridge/PopupMenu.ts b/src/renderer/src/bridge/PopupMenu.ts index c360f2f..cd28cbb 100644 --- a/src/renderer/src/bridge/PopupMenu.ts +++ b/src/renderer/src/bridge/PopupMenu.ts @@ -5,6 +5,7 @@ */ import { IMenuItemOption } from "#" +import type { PopupOptions } from "electron" let _idx: number = 0 @@ -20,7 +21,7 @@ export class PopupMenu { this._items = menu_items } - show() { + show(popupOptions?: PopupOptions) { // console.log('show') this.onHide() // eslint-disable-next-line @typescript-eslint/no-this-alias @@ -44,9 +45,11 @@ export class PopupMenu { } const items = readMenu(this._items) + // popupOptions 中的 x,y 必须为整数 api.popupMenu({ menu_id: this._id, items, + popupOptions, }) ;((offs: OffFunction[]) => { api.once(`popup_menu_close:${this._id}`, () => { diff --git a/src/renderer/src/components/NavBar.vue b/src/renderer/src/components/NavBar.vue index 312730f..c1d8696 100644 --- a/src/renderer/src/components/NavBar.vue +++ b/src/renderer/src/components/NavBar.vue @@ -35,7 +35,7 @@ const isFullScreen = ref(false) onBeforeMount(async () => { isFullScreen.value = await api.call("BasicCommand.isFullscreen") }) -const onClickMenu = () => { +const onClickMenu = e => { const menu = new PopupMenu([ { label: "返回", @@ -71,7 +71,8 @@ const onClickMenu = () => { }, }, ]) - menu.show() + const obj = e.target.getBoundingClientRect() + menu.show({ x: ~~obj.x, y: ~~(obj.y + obj.height) }) } const onClickAbout = () => { diff --git a/src/types/index.d.ts b/src/types/index.d.ts index 417d2f8..77eb2fd 100644 --- a/src/types/index.d.ts +++ b/src/types/index.d.ts @@ -6,4 +6,5 @@ interface IMenuItemOption extends Electron.MenuItemConstructorOptions { export interface IPopupMenuOption { menu_id: string items: IMenuItemOption[] + popupOptions?: PopupOptions }