feat(macos): handle dock icon click to restore window

Add macOS-specific handling for app.run() to catch Reopen events when
the dock icon is clicked, automatically unminimizing and showing the
main window with focus.
This commit is contained in:
Jason
2025-09-16 10:42:59 +08:00
parent bb685be43d
commit 7122e10646

View File

@@ -12,6 +12,8 @@ use tauri::{
tray::{TrayIconBuilder, TrayIconEvent}, tray::{TrayIconBuilder, TrayIconEvent},
}; };
use tauri::{Emitter, Manager}; use tauri::{Emitter, Manager};
#[cfg(target_os = "macos")]
use tauri::RunEvent;
/// 创建动态托盘菜单 /// 创建动态托盘菜单
fn create_tray_menu( fn create_tray_menu(
@@ -229,7 +231,7 @@ async fn update_tray_menu(
#[cfg_attr(mobile, tauri::mobile_entry_point)] #[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() { pub fn run() {
tauri::Builder::default() let builder = tauri::Builder::default()
// 拦截窗口关闭:仅隐藏窗口,保持进程与托盘常驻 // 拦截窗口关闭:仅隐藏窗口,保持进程与托盘常驻
.on_window_event(|window, event| match event { .on_window_event(|window, event| match event {
tauri::WindowEvent::CloseRequested { api, .. } => { tauri::WindowEvent::CloseRequested { api, .. } => {
@@ -352,7 +354,29 @@ pub fn run() {
commands::save_settings, commands::save_settings,
commands::check_for_updates, commands::check_for_updates,
update_tray_menu, update_tray_menu,
]) ]);
.run(tauri::generate_context!())
let app = builder
.build(tauri::generate_context!())
.expect("error while running tauri application"); .expect("error while running tauri application");
app.run(|app_handle, event| {
#[cfg(target_os = "macos")]
// macOS 在 Dock 图标被点击并重新激活应用时会触发 Reopen 事件,这里手动恢复主窗口
match event {
RunEvent::Reopen { .. } => {
if let Some(window) = app_handle.get_webview_window("main") {
let _ = window.unminimize();
let _ = window.show();
let _ = window.set_focus();
}
}
_ => {}
}
#[cfg(not(target_os = "macos"))]
{
let _ = (app_handle, event);
}
});
} }