diff --git a/src/main/resolve/tray.ts b/src/main/resolve/tray.ts index fc1de86..2289a06 100644 --- a/src/main/resolve/tray.ts +++ b/src/main/resolve/tray.ts @@ -463,28 +463,32 @@ export function updateTrayIconImmediate(sysProxyEnabled: boolean, tunEnabled: bo const status = calculateTrayIconStatus(sysProxyEnabled, tunEnabled) const iconPaths = getIconPaths() - const iconPath = iconPaths[status] - - try { - if (process.platform === 'darwin') { - const icon = nativeImage.createFromPath(iconPath).resize({ height: 16 }) - tray.setImage(icon) - } else if (process.platform === 'win32') { - tray.setImage(iconPath) - } else if (process.platform === 'linux') { - tray.setImage(iconPath) + + getAppConfig().then(({ disableTrayIconColor = false }) => { + if (!tray) return + const iconPath = disableTrayIconColor ? iconPaths.white : iconPaths[status] + try { + if (process.platform === 'darwin') { + const icon = nativeImage.createFromPath(iconPath).resize({ height: 16 }) + tray.setImage(icon) + } else if (process.platform === 'win32') { + tray.setImage(iconPath) + } else if (process.platform === 'linux') { + tray.setImage(iconPath) + } + } catch (error) { + console.error('更新托盘图标失败:', error) } - } catch (error) { - console.error('更新托盘图标失败:', error) - } + }) } export async function updateTrayIcon(): Promise { if (!tray) return + const { disableTrayIconColor = false } = await getAppConfig() const status = await getTrayIconStatus() const iconPaths = getIconPaths() - const iconPath = iconPaths[status] + const iconPath = disableTrayIconColor ? iconPaths.white : iconPaths[status] try { if (process.platform === 'darwin') { diff --git a/src/main/utils/template.ts b/src/main/utils/template.ts index 8229bc9..4f375c9 100644 --- a/src/main/utils/template.ts +++ b/src/main/utils/template.ts @@ -9,6 +9,7 @@ export const defaultConfig: IAppConfig = { appTheme: 'system', useWindowFrame: false, proxyInTray: true, + disableTrayIconColor: false, maxLogDays: 7, proxyCols: 'auto', connectionDirection: 'asc', diff --git a/src/renderer/src/components/settings/general-config.tsx b/src/renderer/src/components/settings/general-config.tsx index 6628779..397a564 100644 --- a/src/renderer/src/components/settings/general-config.tsx +++ b/src/renderer/src/components/settings/general-config.tsx @@ -20,6 +20,7 @@ import { showFloatingWindow, showTrayIcon, startMonitor, + updateTrayIcon, writeTheme } from '@renderer/utils/ipc' import { useAppConfig } from '@renderer/hooks/use-app-config' @@ -49,6 +50,7 @@ const GeneralConfig: React.FC = () => { showTraffic = false, proxyInTray = true, disableTray = false, + disableTrayIconColor = false, showFloatingWindow: showFloating = false, spinFloatingIcon = true, floatingWindowCompatMode = true, @@ -314,6 +316,18 @@ const GeneralConfig: React.FC = () => { }} /> + {!disableTray && ( + + { + await patchAppConfig({ disableTrayIconColor: v }) + await updateTrayIcon() + }} + /> + + )} {platform !== 'linux' && ( <> diff --git a/src/renderer/src/locales/en-US.json b/src/renderer/src/locales/en-US.json index 8e271d5..124a13b 100644 --- a/src/renderer/src/locales/en-US.json +++ b/src/renderer/src/locales/en-US.json @@ -61,6 +61,7 @@ "settings.floatingWindowCompatModeTooltip": "Disables transparency effects to prevent crashes on some Windows systems. Recommended to keep enabled for stability", "settings.disableTray": "Disable Tray Icon", "settings.proxyInTray": "Show Proxy Info in Tray Menu", + "settings.disableTrayIconColor": "Disable Tray Icon Color Changes", "settings.showTraffic_windows": "Show Network Speed in Taskbar", "settings.showTraffic_mac": "Show Network Speed in Status Bar", "settings.showDockIcon": "Show Dock Icon", diff --git a/src/renderer/src/locales/fa-IR.json b/src/renderer/src/locales/fa-IR.json index 2224930..39ce800 100644 --- a/src/renderer/src/locales/fa-IR.json +++ b/src/renderer/src/locales/fa-IR.json @@ -58,6 +58,7 @@ "settings.spinFloatingIcon": "چرخش آیکون شناور بر اساس سرعت شبکه", "settings.disableTray": "غیرفعال کردن آیکون سیستم‌تری", "settings.proxyInTray": "نمایش اطلاعات پراکسی در منوی سیستم‌تری", + "settings.disableTrayIconColor": "غیرفعال کردن تغییر رنگ آیکون تری", "settings.showTraffic_windows": "نمایش سرعت شبکه در نوار وظیفه", "settings.showTraffic_mac": "نمایش سرعت شبکه در نوار وضعیت", "settings.showDockIcon": "نمایش آیکون Dock", diff --git a/src/renderer/src/locales/ru-RU.json b/src/renderer/src/locales/ru-RU.json index 091f76d..dee2ab3 100644 --- a/src/renderer/src/locales/ru-RU.json +++ b/src/renderer/src/locales/ru-RU.json @@ -58,6 +58,7 @@ "settings.spinFloatingIcon": "Анимация иконки при активности сети", "settings.disableTray": "Отключить значок в трее", "settings.proxyInTray": "Показывать информацию о прокси в трее", + "settings.disableTrayIconColor": "Отключить смену цвета значка в трее", "settings.showTraffic_windows": "Показывать скорость в панели задач", "settings.showTraffic_mac": "Показывать скорость в строке состояния", "settings.showDockIcon": "Показывать значок в доке", diff --git a/src/renderer/src/locales/zh-CN.json b/src/renderer/src/locales/zh-CN.json index bfd5170..78c6381 100644 --- a/src/renderer/src/locales/zh-CN.json +++ b/src/renderer/src/locales/zh-CN.json @@ -61,6 +61,7 @@ "settings.floatingWindowCompatModeTooltip": "禁用透明效果以避免在某些 Windows 系统上崩溃,建议保持开启以确保稳定性", "settings.disableTray": "禁用托盘图标", "settings.proxyInTray": "在托盘菜单显示代理信息", + "settings.disableTrayIconColor": "禁用托盘图标颜色变化", "settings.showTraffic_windows": "在任务栏显示网速", "settings.showTraffic_mac": "在状态栏显示网速", "settings.showDockIcon": "显示 Dock 图标", diff --git a/src/shared/types.d.ts b/src/shared/types.d.ts index 3f1d3b0..5ddf88e 100644 --- a/src/shared/types.d.ts +++ b/src/shared/types.d.ts @@ -287,6 +287,7 @@ interface IAppConfig { controlSniff?: boolean useDockIcon?: boolean showTraffic?: boolean + disableTrayIconColor?: boolean webdavUrl?: string webdavDir?: string webdavUsername?: string