From c9e85e8cacd3580582b5213cdf4809ccfd2602f5 Mon Sep 17 00:00:00 2001 From: Jason Date: Tue, 20 Jan 2026 19:37:07 +0800 Subject: [PATCH] feat(tray): sync tray menu with app visibility settings Apply visibleApps setting to filter tray menu sections, so hidden apps no longer appear in the system tray menu. --- src-tauri/src/settings.rs | 12 ++++++++++++ src-tauri/src/tray.rs | 9 +++++++++ 2 files changed, 21 insertions(+) diff --git a/src-tauri/src/settings.rs b/src-tauri/src/settings.rs index 01de0af2..00c6a771 100644 --- a/src-tauri/src/settings.rs +++ b/src-tauri/src/settings.rs @@ -45,6 +45,18 @@ impl Default for VisibleApps { } } +impl VisibleApps { + /// Check if the specified app is visible + pub fn is_visible(&self, app: &AppType) -> bool { + match app { + AppType::Claude => self.claude, + AppType::Codex => self.codex, + AppType::Gemini => self.gemini, + AppType::OpenCode => self.opencode, + } + } +} + /// 应用设置结构 /// /// 存储设备级别设置,保存在本地 `~/.cc-switch/settings.json`,不随数据库同步。 diff --git a/src-tauri/src/tray.rs b/src-tauri/src/tray.rs index 715051f6..10b85fa0 100644 --- a/src-tauri/src/tray.rs +++ b/src-tauri/src/tray.rs @@ -318,6 +318,9 @@ pub fn create_tray_menu( let app_settings = crate::settings::get_settings(); let tray_texts = TrayTexts::from_language(app_settings.language.as_deref().unwrap_or("zh")); + // Get visible apps setting, default to all visible + let visible_apps = app_settings.visible_apps.unwrap_or_default(); + let mut menu_builder = MenuBuilder::new(app); // 顶部:打开主界面 @@ -327,7 +330,13 @@ pub fn create_tray_menu( menu_builder = menu_builder.item(&show_main_item).separator(); // 直接添加所有供应商到主菜单(扁平化结构,更简单可靠) + // Only add visible app sections for section in TRAY_SECTIONS.iter() { + // Skip hidden apps + if !visible_apps.is_visible(§ion.app_type) { + continue; + } + let app_type_str = section.app_type.as_str(); let providers = app_state.db.get_all_providers(app_type_str)?;