// Prevents additional console window on Windows in release, DO NOT REMOVE!! #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] use tauri::{AboutMetadata, CustomMenuItem, Menu, MenuItem, Submenu}; #[derive(Clone, serde::Serialize)] struct OpenFolderMessage {} fn main() { let menu = build_menu("BufPiv"); tauri::Builder::default() .menu(menu) .on_menu_event(|event| match event.menu_item_id() { "openfolder" => { event .window() .emit("openfolder", OpenFolderMessage {}) .expect("Failed to emit openfolder event"); } _ => {} }) .run(tauri::generate_context!()) .expect("error while running tauri application"); } fn build_menu(app_name: &str) -> Menu { let mut menu = Menu::new(); #[cfg(target_os = "macos")] { menu = menu.add_submenu(Submenu::new( app_name, Menu::new() .add_native_item(MenuItem::About( app_name.to_string(), AboutMetadata::default(), )) .add_native_item(MenuItem::Separator) .add_native_item(MenuItem::Services) .add_native_item(MenuItem::Separator) .add_native_item(MenuItem::Hide) .add_native_item(MenuItem::HideOthers) .add_native_item(MenuItem::ShowAll) .add_native_item(MenuItem::Separator) .add_native_item(MenuItem::Quit), )); } let open_folder = CustomMenuItem::new("openfolder".to_string(), "Open Folder").accelerator("cmd+shift+O"); let mut file_submenu = Menu::new() .add_item(open_folder) .add_native_item(MenuItem::CloseWindow); #[cfg(not(target_os = "macos"))] { file_submenu = file_submenu.add_native_item(MenuItem::Quit); } menu = menu.add_submenu(Submenu::new("File", file_submenu)); #[cfg(not(target_os = "linux"))] let mut edit_menu = Menu::new(); #[cfg(target_os = "macos")] { edit_menu = edit_menu.add_native_item(MenuItem::Undo); edit_menu = edit_menu.add_native_item(MenuItem::Redo); edit_menu = edit_menu.add_native_item(MenuItem::Separator); } #[cfg(not(target_os = "linux"))] { edit_menu = edit_menu.add_native_item(MenuItem::Cut); edit_menu = edit_menu.add_native_item(MenuItem::Copy); edit_menu = edit_menu.add_native_item(MenuItem::Paste); } #[cfg(target_os = "macos")] { edit_menu = edit_menu.add_native_item(MenuItem::SelectAll); } #[cfg(not(target_os = "linux"))] { menu = menu.add_submenu(Submenu::new("Edit", edit_menu)); } #[cfg(target_os = "macos")] { menu = menu.add_submenu(Submenu::new( "View", Menu::new().add_native_item(MenuItem::EnterFullScreen), )); } let mut window_menu = Menu::new(); window_menu = window_menu.add_native_item(MenuItem::Minimize); #[cfg(target_os = "macos")] { window_menu = window_menu.add_native_item(MenuItem::Zoom); window_menu = window_menu.add_native_item(MenuItem::Separator); } window_menu = window_menu.add_native_item(MenuItem::CloseWindow); menu = menu.add_submenu(Submenu::new("Window", window_menu)); menu }