feat: add swap tray click option in settings

This commit is contained in:
Memory 2025-11-24 19:26:17 +08:00 committed by GitHub
parent 3670f23a1c
commit 4b8ae4063d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 60 additions and 18 deletions

View File

@ -331,7 +331,7 @@ export const buildContextMenu = async (): Promise<Menu> => {
}
export async function createTray(): Promise<void> {
const { useDockIcon = true } = await getAppConfig()
const { useDockIcon = true, swapTrayClick = false } = await getAppConfig()
if (process.platform === 'linux') {
tray = new Tray(pngIcon)
const menu = await buildContextMenu()
@ -359,24 +359,45 @@ export async function createTray(): Promise<void> {
image.setTemplateImage(true)
tray?.setImage(image)
})
// macOS 默认行为: 左键显示窗口, 右键显示菜单
tray?.addListener('click', async () => {
triggerMainWindow()
if (swapTrayClick) {
await updateTrayMenu()
} else {
triggerMainWindow()
}
})
tray?.addListener('right-click', async () => {
await updateTrayMenu()
if (swapTrayClick) {
triggerMainWindow()
} else {
await updateTrayMenu()
}
})
}
if (process.platform === 'win32') {
tray?.addListener('click', () => {
triggerMainWindow()
tray?.addListener('click', async () => {
if (swapTrayClick) {
await updateTrayMenu()
} else {
triggerMainWindow()
}
})
tray?.addListener('right-click', async () => {
await updateTrayMenu()
if (swapTrayClick) {
triggerMainWindow()
} else {
await updateTrayMenu()
}
})
}
if (process.platform === 'linux') {
tray?.addListener('click', () => {
triggerMainWindow()
tray?.addListener('click', async () => {
if (swapTrayClick) {
await updateTrayMenu()
} else {
triggerMainWindow()
}
})
ipcMain.on('updateTrayMenu', async () => {
await updateTrayMenu()

View File

@ -51,6 +51,7 @@ const GeneralConfig: React.FC = () => {
proxyInTray = true,
showCurrentProxyInTray = false,
disableTray = false,
swapTrayClick = false,
disableTrayIconColor = false,
disableAnimations = false,
showFloatingWindow: showFloating = false,
@ -321,16 +322,31 @@ const GeneralConfig: React.FC = () => {
/>
</SettingItem>
{!disableTray && (
<SettingItem title={t('settings.disableTrayIconColor')} divider>
<Switch
size="sm"
isSelected={disableTrayIconColor}
onValueChange={async (v) => {
await patchAppConfig({ disableTrayIconColor: v })
await updateTrayIcon()
}}
/>
</SettingItem>
<>
<SettingItem title={t('settings.swapTrayClick')} divider>
<Switch
size="sm"
isSelected={swapTrayClick}
onValueChange={async (v) => {
await patchAppConfig({ swapTrayClick: v })
closeTrayIcon()
setTimeout(() => {
showTrayIcon()
}, 100)
}}
/>
</SettingItem>
<SettingItem title={t('settings.disableTrayIconColor')} divider>
<Switch
size="sm"
isSelected={disableTrayIconColor}
onValueChange={async (v) => {
await patchAppConfig({ disableTrayIconColor: v })
await updateTrayIcon()
}}
/>
</SettingItem>
</>
)}
{platform !== 'linux' && (
<>

View File

@ -64,6 +64,7 @@
"settings.floatingWindowCompatMode": "Floating Window Compatibility Mode (Recommended)",
"settings.floatingWindowCompatModeTooltip": "Disables transparency effects to prevent crashes on some Windows systems. Recommended to keep enabled for stability",
"settings.disableTray": "Disable Tray Icon",
"settings.swapTrayClick": "Swap Tray Left/Right Click",
"settings.proxyInTray": "Show Proxy Info in Tray Menu",
"settings.showCurrentProxyInTray": "Show Current Proxy in Tray Menu",
"settings.disableTrayIconColor": "Disable Tray Icon Color Changes",

View File

@ -60,6 +60,7 @@
"settings.showFloatingWindow": "نمایش پنجره شناور",
"settings.spinFloatingIcon": "چرخش آیکون شناور بر اساس سرعت شبکه",
"settings.disableTray": "غیرفعال کردن آیکون سیستم‌تری",
"settings.swapTrayClick": "تعویض کلیک چپ/راست تری",
"settings.proxyInTray": "نمایش اطلاعات پراکسی در منوی سیستم‌تری",
"settings.disableTrayIconColor": "غیرفعال کردن تغییر رنگ آیکون تری",
"settings.disableAnimations": "غیرفعال کردن جلوه‌های انیمیشن",

View File

@ -60,6 +60,7 @@
"settings.showFloatingWindow": "Показывать плавающее окно",
"settings.spinFloatingIcon": "Анимация иконки при активности сети",
"settings.disableTray": "Отключить значок в трее",
"settings.swapTrayClick": "Поменять местами левый/правый клик в трее",
"settings.proxyInTray": "Показывать информацию о прокси в трее",
"settings.disableTrayIconColor": "Отключить смену цвета значка в трее",
"settings.disableAnimations": "Отключить анимационные эффекты",

View File

@ -64,6 +64,7 @@
"settings.floatingWindowCompatMode": "悬浮窗兼容模式(推荐开启)",
"settings.floatingWindowCompatModeTooltip": "禁用透明效果以避免在某些 Windows 系统上崩溃,建议保持开启以确保稳定性",
"settings.disableTray": "禁用托盘图标",
"settings.swapTrayClick": "交换托盘左右键功能",
"settings.proxyInTray": "在托盘菜单显示代理信息",
"settings.showCurrentProxyInTray": "托盘菜单显示当前代理",
"settings.disableTrayIconColor": "禁用托盘图标颜色变化",

View File

@ -238,6 +238,7 @@ interface IAppConfig {
connectionTableSortDirection?: 'asc' | 'desc'
spinFloatingIcon?: boolean
disableTray?: boolean
swapTrayClick?: boolean
showFloatingWindow?: boolean
floatingWindowCompatMode?: boolean
disableHardwareAcceleration?: boolean