aboutsummaryrefslogtreecommitdiff
path: root/bundle/src-tauri/src/menu.rs
diff options
context:
space:
mode:
Diffstat (limited to 'bundle/src-tauri/src/menu.rs')
-rw-r--r--bundle/src-tauri/src/menu.rs55
1 files changed, 55 insertions, 0 deletions
diff --git a/bundle/src-tauri/src/menu.rs b/bundle/src-tauri/src/menu.rs
new file mode 100644
index 0000000..83ba7e3
--- /dev/null
+++ b/bundle/src-tauri/src/menu.rs
@@ -0,0 +1,55 @@
+use tauri::{
+ menu::{Menu, MenuBuilder, MenuItem, SubmenuBuilder},
+ AppHandle, Runtime,
+};
+
+// One menu for all platforms: the macOS menu bar, or the top of each window elsewhere.
+// Custom item ids name the frontend commands that the same shortcuts run.
+pub fn build<R: Runtime>(app: &AppHandle<R>) -> tauri::Result<Menu<R>> {
+ let item = |id: &str, text: &str, accelerator: &str| {
+ MenuItem::with_id(app, id, text, true, Some(accelerator))
+ };
+ let file = SubmenuBuilder::new(app, "File")
+ .item(&item("new", "New", "CmdOrCtrl+N")?)
+ .item(&item("new_window", "New Window", "CmdOrCtrl+Shift+N")?)
+ .item(&item("open", "Open…", "CmdOrCtrl+O")?)
+ .item(&item("save", "Save", "CmdOrCtrl+S")?)
+ .separator()
+ .close_window()
+ .build()?;
+ // macOS needs the predefined edit items for clipboard and undo keys in the webview.
+ let edit = SubmenuBuilder::new(app, "Edit")
+ .undo()
+ .redo()
+ .separator()
+ .cut()
+ .copy()
+ .paste()
+ .select_all()
+ .separator()
+ .item(&item("find", "Find", "CmdOrCtrl+F")?)
+ .item(&item("comment", "Toggle Line Comment", "CmdOrCtrl+/")?)
+ .build()?;
+ let window = SubmenuBuilder::new(app, "Window")
+ .minimize()
+ .maximize()
+ .build()?;
+ let menu = MenuBuilder::new(app);
+ // macOS shows the first submenu as the application menu. Quit skips unsaved-changes
+ // prompts, so other platforms close windows instead.
+ #[cfg(target_os = "macos")]
+ let menu = menu.item(
+ &SubmenuBuilder::new(app, "CPSC Bundle")
+ .about(None)
+ .separator()
+ .services()
+ .separator()
+ .hide()
+ .hide_others()
+ .show_all()
+ .separator()
+ .quit()
+ .build()?,
+ );
+ menu.items(&[&file, &edit, &window]).build()
+}