| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- use crate::app_state::AppState;
- use tauri::menu::{MenuBuilder, MenuItemBuilder};
- use tauri::tray::{MouseButton, MouseButtonState, TrayIconBuilder, TrayIconEvent};
- use tauri::{App, Manager};
- pub fn setup_tray(app: &App) -> tauri::Result<()> {
- let settings_i = MenuItemBuilder::with_id("settings", "设置").build(app)?;
- let toggle_i = MenuItemBuilder::with_id("toggle", "显示/隐藏").build(app)?;
- let passthrough_i = MenuItemBuilder::with_id("passthrough", "鼠标穿透").build(app)?;
- let quit_i = MenuItemBuilder::with_id("quit", "退出").build(app)?;
- let menu = MenuBuilder::new(app)
- .items(&[&settings_i, &toggle_i, &passthrough_i, &quit_i])
- .build()?;
- let _tray = TrayIconBuilder::new()
- .icon(app.default_window_icon().expect("bundle icon").clone())
- .menu(&menu)
- .show_menu_on_left_click(false)
- .on_menu_event(|app, event| match event.id().as_ref() {
- "settings" => show_settings(app),
- "toggle" => toggle_main(app),
- "passthrough" => toggle_passthrough(app),
- "quit" => app.exit(0),
- _ => {}
- })
- .on_tray_icon_event(|tray, event| {
- if let TrayIconEvent::Click {
- button: MouseButton::Left,
- button_state: MouseButtonState::Up,
- ..
- } = event
- {
- toggle_main(tray.app_handle());
- }
- })
- .build(app)?;
- Ok(())
- }
- pub fn show_settings(app: &tauri::AppHandle) {
- if let Some(win) = app.get_webview_window("settings") {
- let _ = win.show();
- let _ = win.set_focus();
- }
- }
- pub fn toggle_main(app: &tauri::AppHandle) {
- if let Some(win) = app.get_webview_window("main") {
- match win.is_visible() {
- Ok(true) => { let _ = win.hide(); }
- _ => { let _ = win.show(); }
- }
- }
- }
- pub fn toggle_passthrough(app: &tauri::AppHandle) {
- if let Some(state) = app.try_state::<AppState>() {
- let mut passthrough = state.passthrough.lock().unwrap();
- *passthrough = !*passthrough;
- if let Some(win) = app.get_webview_window("main") {
- let _ = win.set_ignore_cursor_events(*passthrough);
- }
- }
- }
|