Add application menu to Tauri app

This commit is contained in:
Martin Kleinschrodt 2021-12-29 18:10:52 +01:00
parent a52ee00f19
commit 6dad693828
2 changed files with 88 additions and 1 deletions

View File

@ -3,8 +3,23 @@
windows_subsystem = "windows"
)]
use crate::menu::AddDefaultSubmenus;
use tauri::{Menu};
mod menu;
fn main() {
let ctx = tauri::generate_context!();
tauri::Builder::default()
.run(tauri::generate_context!())
.invoke_handler(tauri::generate_handler![])
.menu(
Menu::new()
.add_default_app_submenu_if_macos(&ctx.package_info().name)
.add_default_file_submenu()
.add_default_edit_submenu()
.add_default_window_submenu()
)
.run(ctx)
.expect("error while running tauri application");
}

View File

@ -0,0 +1,72 @@
use tauri::{Menu, MenuItem, Submenu};
pub trait AddDefaultSubmenus {
fn add_default_app_submenu_if_macos(self, app_name: &str) -> Self;
fn add_default_file_submenu(self) -> Self;
fn add_default_edit_submenu(self) -> Self;
fn add_default_view_submenu(self) -> Self;
fn add_default_window_submenu(self) -> Self;
}
impl AddDefaultSubmenus for Menu {
fn add_default_app_submenu_if_macos(self, app_name: &str) -> Menu {
#[cfg(target_os = "macos")]
return self.add_submenu(Submenu::new(
app_name.to_string(),
Menu::new()
.add_native_item(MenuItem::About(app_name.to_string()))
.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),
));
#[cfg(not(target_os = "macos"))]
return self;
}
fn add_default_file_submenu(self) -> Menu {
self.add_submenu(Submenu::new(
"File",
Menu::new().add_native_item(MenuItem::CloseWindow),
))
}
fn add_default_edit_submenu(self) -> Menu {
self.add_submenu(Submenu::new("Edit", {
let mut menu = Menu::new()
.add_native_item(MenuItem::Undo)
.add_native_item(MenuItem::Redo)
.add_native_item(MenuItem::Separator)
.add_native_item(MenuItem::Cut)
.add_native_item(MenuItem::Copy)
.add_native_item(MenuItem::Paste);
#[cfg(not(target_os = "macos"))]
{
menu = menu.add_native_item(MenuItem::Separator);
}
menu = menu.add_native_item(MenuItem::SelectAll);
// macOS automatically adds "Start Dictation" and "Emoji & Symbols" to
// the bottom of the Edit menu
menu
}))
}
fn add_default_view_submenu(self) -> Menu {
self.add_submenu(Submenu::new(
"View",
Menu::new().add_native_item(MenuItem::EnterFullScreen),
))
}
fn add_default_window_submenu(self) -> Menu {
self.add_submenu(Submenu::new(
"Window",
Menu::new()
.add_native_item(MenuItem::Minimize)
.add_native_item(MenuItem::Zoom),
))
}
}