From 9a66fccc2f7d0bcd720b4c0d73172c617fb0df41 Mon Sep 17 00:00:00 2001 From: ehgen0ng Date: Wed, 18 Feb 2026 22:41:36 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E2=9C=A8=20feat(tray):=20=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0=E8=B7=A8=E5=B9=B3=E5=8F=B0=E7=AA=97=E5=8F=A3=E5=85=B3?= =?UTF-8?q?=E9=97=AD=E6=9C=80=E5=B0=8F=E5=8C=96=E5=88=B0=E6=89=98=E7=9B=98?= =?UTF-8?q?=20=20=20-=20=E3=80=90feat=E3=80=91=E7=A7=BB=E9=99=A4=E7=AA=97?= =?UTF-8?q?=E5=8F=A3=E5=85=B3=E9=97=AD=E5=A4=84=E7=90=86=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E7=9A=84=E5=B9=B3=E5=8F=B0=E9=99=90=E5=88=B6=EF=BC=8C=E4=BD=BF?= =?UTF-8?q?=E5=85=B6=E5=9C=A8=20macOS=20=E4=B8=8A=E5=90=8C=E6=A0=B7?= =?UTF-8?q?=E7=94=9F=E6=95=88=20=20=20-=20=E3=80=90feat=E3=80=91=E7=BB=9F?= =?UTF-8?q?=E4=B8=80=E5=90=84=E5=B9=B3=E5=8F=B0=E7=9A=84=E5=85=B3=E9=97=AD?= =?UTF-8?q?=E8=A1=8C=E4=B8=BA=EF=BC=8C=E7=82=B9=E5=87=BB=E5=85=B3=E9=97=AD?= =?UTF-8?q?=E6=8C=89=E9=92=AE=E6=97=B6=E5=B0=86=E7=AA=97=E5=8F=A3=E9=9A=90?= =?UTF-8?q?=E8=97=8F=E8=87=B3=E6=89=98=E7=9B=98=E8=80=8C=E9=9D=9E=E9=80=80?= =?UTF-8?q?=E5=87=BA=20=20=20-=20=E3=80=90refactor=E3=80=91=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=20hide=5Fwindow=5Fto=5Ftray=20=E7=9A=84=E5=BC=95?= =?UTF-8?q?=E7=94=A8=E8=B7=AF=E5=BE=84=E4=BB=A5=E7=A1=AE=E4=BF=9D=E8=B7=A8?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=E8=B0=83=E7=94=A8=E6=AD=A3=E7=A1=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src-tauri/src/main.rs | 3 +-- src-tauri/src/setup/tray.rs | 9 +++------ 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index eba18a7..b0cde6d 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -143,8 +143,7 @@ fn setup_app_hooks(app: &mut tauri::App) -> tauri::Result<()> { #[cfg(not(target_os = "macos"))] setup::tray::setup_system_tray(app)?; - // 5. 处理窗口关闭事件 - #[cfg(not(target_os = "macos"))] + // 5. 处理窗口关闭事件(跨平台:关闭按钮最小化到托盘/状态栏而非退出) setup::tray::setup_window_close_handler(app)?; // 6. 创建应用菜单栏(仅 macOS) diff --git a/src-tauri/src/setup/tray.rs b/src-tauri/src/setup/tray.rs index 09f30ae..3591192 100644 --- a/src-tauri/src/setup/tray.rs +++ b/src-tauri/src/setup/tray.rs @@ -1,10 +1,9 @@ -use tauri::{AppHandle, Manager, Runtime, WebviewWindow}; +use tauri::{AppHandle, Emitter, Manager, Runtime, WebviewWindow}; #[cfg(not(target_os = "macos"))] use tauri::{ menu::{Menu, MenuItem, PredefinedMenuItem}, tray::{MouseButton, MouseButtonState, TrayIconBuilder, TrayIconEvent}, - Emitter, }; /// 创建系统托盘菜单 @@ -166,11 +165,9 @@ pub fn setup_system_tray(app: &tauri::App) -> tauri::Result<()> { Ok(()) } -#[cfg(not(target_os = "macos"))] const CLOSE_CONFIRM_EVENT: &str = "duckcoding://request-close-action"; -/// 设置窗口关闭处理(最小化到托盘而不是退出) -#[cfg(not(target_os = "macos"))] +/// 设置窗口关闭处理(最小化到托盘而不是退出,跨平台) pub fn setup_window_close_handler(app: &tauri::App) -> tauri::Result<()> { if let Some(window) = app.get_webview_window("main") { let window_clone = window.clone(); @@ -185,7 +182,7 @@ pub fn setup_window_close_handler(app: &tauri::App) -> tauri::Res error = ?err, "发送关闭确认事件失败,降级为隐藏窗口" ); - hide_window_to_tray(&window_clone); + ::duckcoding::ui::hide_window_to_tray(&window_clone); } } }); From 8c73cf8a18aaccfabdb7a037705c40b244f0e15d Mon Sep 17 00:00:00 2001 From: ehgen0ng Date: Wed, 18 Feb 2026 23:04:40 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20refactor(tray):=20?= =?UTF-8?q?=E7=A7=BB=E9=99=A4=E6=9C=AA=E4=BD=BF=E7=94=A8=E7=9A=84=E9=9A=90?= =?UTF-8?q?=E8=97=8F=E7=AA=97=E5=8F=A3=E5=88=B0=E6=89=98=E7=9B=98=E5=87=BD?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 删除不再使用的 hide_window_to_tray 函数以优化代码结构 - 清理冗余的跨平台窗口显示管理逻辑代码 --- src-tauri/src/setup/tray.rs | 26 -------------------------- 1 file changed, 26 deletions(-) diff --git a/src-tauri/src/setup/tray.rs b/src-tauri/src/setup/tray.rs index 3591192..35f4f61 100644 --- a/src-tauri/src/setup/tray.rs +++ b/src-tauri/src/setup/tray.rs @@ -87,32 +87,6 @@ pub fn restore_window_state(window: &WebviewWindow) { } } -/// 隐藏窗口到系统托盘 -#[cfg(not(target_os = "macos"))] -pub fn hide_window_to_tray(window: &WebviewWindow) { - tracing::info!("隐藏窗口到系统托盘"); - if let Err(e) = window.hide() { - tracing::error!(error = ?e, "隐藏窗口失败"); - } - - #[cfg(target_os = "macos")] - #[allow(deprecated)] - { - use cocoa::appkit::NSApplication; - use cocoa::base::nil; - use cocoa::foundation::NSAutoreleasePool; - - unsafe { - let _pool = NSAutoreleasePool::new(nil); - let app_macos = NSApplication::sharedApplication(nil); - app_macos.setActivationPolicy_( - cocoa::appkit::NSApplicationActivationPolicy::NSApplicationActivationPolicyAccessory, - ); - } - tracing::debug!("macOS Dock 图标已隐藏"); - } -} - /// 设置系统托盘(包含事件处理) #[cfg(not(target_os = "macos"))] pub fn setup_system_tray(app: &tauri::App) -> tauri::Result<()> {