Add application menu to Tauri app
This commit is contained in:
parent
a52ee00f19
commit
6dad693828
|
@ -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");
|
||||
}
|
||||
|
|
|
@ -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),
|
||||
))
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue