fix: prevent tray icon flickering on macOS and Linux

This commit is contained in:
xmk23333 2026-01-15 20:56:27 +08:00
parent 7b104df463
commit ae42750f34
3 changed files with 18 additions and 18 deletions

View File

@ -138,7 +138,8 @@ const ConnCard: React.FC<Props> = (props) => {
data.push(info.up + info.down) data.push(info.up + info.down)
return data return data
}) })
if (platform === 'darwin' && showTraffic) { if (platform === 'darwin') {
if (showTraffic) {
if (drawingRef.current) return if (drawingRef.current) return
drawingRef.current = true drawingRef.current = true
try { try {
@ -149,11 +150,12 @@ const ConnCard: React.FC<Props> = (props) => {
} finally { } finally {
drawingRef.current = false drawingRef.current = false
} }
} else { } else if (hasShowTrafficRef.current) {
if (!hasShowTrafficRef.current) return // 只在从 showTraffic=true 切换到 false 时恢复一次原始图标
window.electron.ipcRenderer.send('trayIconUpdate', trayIconBase64) window.electron.ipcRenderer.send('trayIconUpdate', trayIconBase64)
hasShowTrafficRef.current = false hasShowTrafficRef.current = false
} }
}
}, },
[showTraffic] [showTraffic]
) )

View File

@ -3,7 +3,7 @@ import { toast } from '@renderer/components/base/toast'
import BorderSwitch from '@renderer/components/base/border-swtich' import BorderSwitch from '@renderer/components/base/border-swtich'
import { useLocation, useNavigate } from 'react-router-dom' import { useLocation, useNavigate } from 'react-router-dom'
import { useAppConfig } from '@renderer/hooks/use-app-config' import { useAppConfig } from '@renderer/hooks/use-app-config'
import { triggerSysProxy, updateTrayIcon, updateTrayIconImmediate } from '@renderer/utils/ipc' import { triggerSysProxy, updateTrayIconImmediate } from '@renderer/utils/ipc'
import { useControledMihomoConfig } from '@renderer/hooks/use-controled-mihomo-config' import { useControledMihomoConfig } from '@renderer/hooks/use-controled-mihomo-config'
import { AiOutlineGlobal } from 'react-icons/ai' import { AiOutlineGlobal } from 'react-icons/ai'
import React from 'react' import React from 'react'
@ -50,7 +50,6 @@ const SysproxySwitcher: React.FC<Props> = (props) => {
window.electron.ipcRenderer.send('updateFloatingWindow') window.electron.ipcRenderer.send('updateFloatingWindow')
window.electron.ipcRenderer.send('updateTrayMenu') window.electron.ipcRenderer.send('updateTrayMenu')
await updateTrayIcon()
} catch (e) { } catch (e) {
await patchAppConfig({ sysProxy: { enable: previousState } }) await patchAppConfig({ sysProxy: { enable: previousState } })
// 回滚图标 // 回滚图标

View File

@ -3,7 +3,7 @@ import { useControledMihomoConfig } from '@renderer/hooks/use-controled-mihomo-c
import BorderSwitch from '@renderer/components/base/border-swtich' import BorderSwitch from '@renderer/components/base/border-swtich'
import { TbDeviceIpadHorizontalBolt } from 'react-icons/tb' import { TbDeviceIpadHorizontalBolt } from 'react-icons/tb'
import { useLocation, useNavigate } from 'react-router-dom' import { useLocation, useNavigate } from 'react-router-dom'
import { restartCore, updateTrayIcon, updateTrayIconImmediate } from '@renderer/utils/ipc' import { restartCore, updateTrayIconImmediate } from '@renderer/utils/ipc'
import { useSortable } from '@dnd-kit/sortable' import { useSortable } from '@dnd-kit/sortable'
import { CSS } from '@dnd-kit/utilities' import { CSS } from '@dnd-kit/utilities'
import React from 'react' import React from 'react'
@ -99,7 +99,6 @@ const TunSwitcher: React.FC<Props> = (props) => {
await restartCore() await restartCore()
window.electron.ipcRenderer.send('updateFloatingWindow') window.electron.ipcRenderer.send('updateFloatingWindow')
window.electron.ipcRenderer.send('updateTrayMenu') window.electron.ipcRenderer.send('updateTrayMenu')
await updateTrayIcon()
} }
if (iconOnly) { if (iconOnly) {