Files
voidraft/internal/events/tray_events.go
2025-06-09 01:00:15 +08:00

48 lines
1.5 KiB
Go

package events
import (
"time"
"voidraft/internal/services"
"github.com/wailsapp/wails/v3/pkg/application"
wailsevents "github.com/wailsapp/wails/v3/pkg/events"
)
// RegisterTrayEvents 注册与系统托盘相关的所有事件
func RegisterTrayEvents(app *application.App, systray *application.SystemTray, mainWindow *application.WebviewWindow, trayService *services.TrayService) {
// 不附加窗口到系统托盘,避免失去焦点自动缩小
// systray.AttachWindow(mainWindow)
// 设置窗口防抖时间
systray.WindowDebounce(200 * time.Millisecond)
// 设置点击托盘图标显示主窗口
systray.OnClick(func() {
trayService.ShowWindow()
})
// 处理窗口关闭事件 - 根据配置决定是隐藏到托盘还是直接退出
mainWindow.RegisterHook(wailsevents.Common.WindowClosing, func(event *application.WindowEvent) {
// 取消默认关闭行为
event.Cancel()
// 使用托盘服务处理关闭事件
trayService.HandleWindowClose()
})
// 不再拦截窗口最小化事件,让任务栏点击保持正常行为
// 最小化到托盘的逻辑由前端标题栏按钮直接处理
}
// RegisterTrayMenuEvents 注册系统托盘菜单事件
func RegisterTrayMenuEvents(app *application.App, menu *application.Menu, mainWindow *application.WebviewWindow) {
menu.Add("主窗口").OnClick(func(data *application.Context) {
mainWindow.Show()
})
menu.AddSeparator()
menu.Add("退出").OnClick(func(data *application.Context) {
app.Quit()
})
}