mirror of
https://github.com/farion1231/cc-switch.git
synced 2026-05-12 14:51:08 +08:00
fix: 修复最小化到托盘后应用过一段时间自动退出的问题 (#1245)
ExitRequested 事件处理器无条件执行清理并调用 std::process::exit(0), 导致 api.prevent_exit() 被完全抵消。当隐藏窗口的 WebView 被 Windows 后台优化策略回收、窗口对象销毁后,Tauri 运行时检测到无存活窗口自动 触发 ExitRequested,应用随即退出。 通过 ExitRequested 的 code 字段区分两种场景: - code 为 None(运行时自动触发):仅 prevent_exit(),保持托盘后台运行 - code 为 Some(_)(用户主动 app.exit()):执行清理后退出 Closes #728
This commit is contained in:
+12
-3
@@ -1094,9 +1094,18 @@ pub fn run() {
|
||||
|
||||
app.run(|app_handle, event| {
|
||||
// 处理退出请求(所有平台)
|
||||
if let RunEvent::ExitRequested { api, .. } = &event {
|
||||
log::info!("收到退出请求,开始清理...");
|
||||
// 阻止立即退出,执行清理
|
||||
if let RunEvent::ExitRequested { api, code, .. } = &event {
|
||||
// code 为 None 表示运行时自动触发(如隐藏窗口的 WebView 被回收导致无存活窗口),
|
||||
// 此时应仅阻止退出、保持托盘后台运行;
|
||||
// code 为 Some(_) 表示用户主动调用 app.exit() 退出(如托盘菜单"退出"),
|
||||
// 此时执行清理后退出。
|
||||
if code.is_none() {
|
||||
log::info!("运行时触发退出请求(无存活窗口),阻止退出以保持托盘后台运行");
|
||||
api.prevent_exit();
|
||||
return;
|
||||
}
|
||||
|
||||
log::info!("收到用户主动退出请求 (code={code:?}),开始清理...");
|
||||
api.prevent_exit();
|
||||
|
||||
let app_handle = app_handle.clone();
|
||||
|
||||
Reference in New Issue
Block a user