Files
Ant Browser Release Bot 3d264eb83d publish: 1.1.0 snapshot (a358335)
channel: master
version: 1.1.0
source-ref: master
published-at-utc: 2026-03-29T11:32:04Z
2026-03-29 19:32:05 +08:00

84 lines
1.6 KiB
Go

//go:build windows
package tray
import (
_ "embed"
"runtime"
"github.com/energye/systray"
)
//go:embed icon.ico
var iconData []byte
// Callbacks 托盘回调
type Callbacks struct {
OnShow func()
OnQuitAppOnly func()
OnQuit func()
}
// Run 启动系统托盘(阻塞,需在独立 goroutine 中调用)。
// Windows 托盘依赖消息循环,必须固定在同一个 OS 线程上。
func Run(cb Callbacks) {
runtime.LockOSThread()
defer runtime.UnlockOSThread()
systray.Run(func() {
systray.SetIcon(iconData)
systray.SetTitle("Ant Chrome")
systray.SetTooltip("Ant Chrome")
mShow := systray.AddMenuItem("显示窗口", "显示主窗口")
systray.AddSeparator()
mQuitAppOnly := systray.AddMenuItem("仅退出应用", "关闭客户端,保留已打开的浏览器")
mQuit := systray.AddMenuItem("退出应用与浏览器", "退出应用并关闭当前打开的浏览器")
systray.SetOnClick(func(menu systray.IMenu) {
if cb.OnShow != nil {
cb.OnShow()
}
})
systray.SetOnDClick(func(menu systray.IMenu) {
if cb.OnShow != nil {
cb.OnShow()
}
})
systray.SetOnRClick(func(menu systray.IMenu) {
if menu != nil {
_ = menu.ShowMenu()
}
})
mShow.Click(func() {
if cb.OnShow != nil {
cb.OnShow()
}
})
mQuitAppOnly.Click(func() {
systray.Quit()
if cb.OnQuitAppOnly != nil {
cb.OnQuitAppOnly()
}
})
mQuit.Click(func() {
systray.Quit()
if cb.OnQuit != nil {
cb.OnQuit()
}
})
}, func() {
// onExit: 托盘退出时什么都不做,由 OnQuit 回调处理
})
}
// Quit 主动退出托盘循环
func Quit() {
systray.Quit()
}