Context Menu
Call ContextMenu.showContextMenu() from the main process. The menu opens at
the current global pointer position.
import { ContextMenu } from "electrobun/main";
ContextMenu.showContextMenu([ { label: "Open", action: "open", accelerator: "o", data: { source: "context-menu" }, }, { label: "More", submenu: [ { label: "Rename", action: "rename" }, { label: "Delete", action: "delete", enabled: false }, ], }, { type: "separator" }, { role: "copy" }, { role: "paste" },]);
ContextMenu.on("context-menu-clicked", (event: unknown) => { console.log("Context menu action", event);});import { ContextMenu } from "electrobun/main";
ContextMenu.showContextMenu([ { label: "Open", action: "open", accelerator: "o", data: { source: "context-menu" }, }, { label: "More", submenu: [ { label: "Rename", action: "rename" }, { label: "Delete", action: "delete", enabled: false }, ], }, { type: "separator" }, { role: "copy" }, { role: "paste" },]);
ContextMenu.on("context-menu-clicked", (event: unknown) => { console.log("Context menu action", event);});fn onContextMenuAction(item_id: u32, action: [*:0]const u8) callconv(.C) void { std.debug.print("context menu action: {d} {s}\n", .{ item_id, action });}
const menu_json = \\[{"label": "Open", "action": "open"}, \\ {"label": "Rename", "action": "rename"}, \\ {"type": "separator"}, \\ {"role": "copy"}, \\ {"role": "paste"}];
try core.showContextMenuJson(menu_json, onContextMenuAction);extern "C" fn on_context_menu_action(item_id: u32, action: *const c_char) { let action = electrobun::c_string_to_string(action); println!("context menu action: {item_id} {action}");}
let menu_json = r#"[ {"label": "Open", "action": "open"}, {"label": "Rename", "action": "rename"}, {"type": "separator"}, {"role": "copy"}, {"role": "paste"}]"#;
core.show_context_menu_json(menu_json, Some(on_context_menu_action))?;menuJSON := `[ {"label": "Open", "action": "open"}, {"label": "Rename", "action": "rename"}, {"type": "separator"}, {"role": "copy"}, {"role": "paste"}]`
err := core.ShowContextMenuJSON(menuJSON, func(itemID uint32, action string) { fmt.Printf("context menu action: %d %s\n", itemID, action)})on_context_menu_action :: proc "c" (item_id: u32, action: cstring) { context = runtime.default_context() fmt.printfln("context menu action: %d %s", item_id, action)}
MENU_JSON :: `[ {"label": "Open", "action": "open"}, {"label": "Rename", "action": "rename"}, {"type": "separator"}, {"role": "copy"}, {"role": "paste"}]`
_ = electrobun.showContextMenuJson(core, MENU_JSON, on_context_menu_action)Normal items support label, action or role, data, submenu, enabled,
checked, hidden, tooltip, and accelerator. Separators accept either
separator or divider as their type.
In a webview, prevent the browser’s default contextmenu event and make an RPC
request to the main process, which owns the native menu API.
Context menus are currently implemented on macOS and Windows. Linux support is not yet available.