From f4a4d63349036f84a3627b300a509388c17e58fa Mon Sep 17 00:00:00 2001 From: PJ Date: Sat, 20 Jun 2026 15:13:12 -0400 Subject: [PATCH] feat(menu): native File menu with New Book and Export --- src-tauri/src/lib.rs | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index c8b1315..478713a 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -3,11 +3,37 @@ mod library; mod pdf; mod project; +use tauri::menu::{Menu, MenuItemBuilder, PredefinedMenuItem, SubmenuBuilder}; +use tauri::{Emitter, Runtime}; + +fn build_menu(handle: &tauri::AppHandle) -> tauri::Result> { + let menu = Menu::default(handle)?; + let new_book = MenuItemBuilder::with_id("new-book", "New Book") + .accelerator("CmdOrCtrl+N") + .build(handle)?; + let export_pdf = MenuItemBuilder::with_id("export-pdf", "Export as PDF…").build(handle)?; + let export_epub = MenuItemBuilder::with_id("export-epub", "Export as EPUB…").build(handle)?; + let file_submenu = SubmenuBuilder::new(handle, "File") + .item(&new_book) + .item(&PredefinedMenuItem::separator(handle)?) + .item(&export_pdf) + .item(&export_epub) + .build()?; + menu.insert(&file_submenu, 1)?; + Ok(menu) +} + #[cfg_attr(mobile, tauri::mobile_entry_point)] pub fn run() { tauri::Builder::default() .plugin(tauri_plugin_opener::init()) .plugin(tauri_plugin_dialog::init()) + .menu(|handle| build_menu(handle)) + .on_menu_event(|app, event| { + if matches!(event.id().0.as_str(), "new-book" | "export-pdf" | "export-epub") { + app.emit("menu-action", event.id().0.as_str()).ok(); + } + }) .invoke_handler(tauri::generate_handler![ epub::package_epub, pdf::compile_pdf,