From 0710f0c9b0384f5e22affa06cdf5c73e36aa7a8f Mon Sep 17 00:00:00 2001 From: landaiqing Date: Thu, 1 May 2025 18:18:34 +0800 Subject: [PATCH] :sparkles: Added systray --- internal/systray/systray.go | 44 +++++++++++++++++++++++++++++++++++++ main.go | 18 +++------------ 2 files changed, 47 insertions(+), 15 deletions(-) create mode 100644 internal/systray/systray.go diff --git a/internal/systray/systray.go b/internal/systray/systray.go new file mode 100644 index 0000000..89cd10a --- /dev/null +++ b/internal/systray/systray.go @@ -0,0 +1,44 @@ +package systray + +import ( + "embed" + "time" + + "github.com/wailsapp/wails/v3/pkg/application" +) + +// SetupSystemTray 设置系统托盘及其功能 +func SetupSystemTray(app *application.App, mainWindow *application.WebviewWindow, assets embed.FS) { + // 创建系统托盘 + systray := app.NewSystemTray() + + // 设置图标 + iconBytes, _ := assets.ReadFile("appicon.png") + systray.SetIcon(iconBytes) + + // 设置标签 + systray.SetLabel("VoidRaft") + + // 创建托盘菜单 + menu := app.NewMenu() + menu.Add("显示主窗口").OnClick(func(data *application.Context) { + mainWindow.Show() + }) + menu.AddSeparator() + menu.Add("退出").OnClick(func(data *application.Context) { + app.Quit() + }) + + systray.SetMenu(menu) + + // 设置点击托盘图标显示主窗口 + systray.OnClick(func() { + mainWindow.Show() + }) + + // 将窗口附加到系统托盘 + systray.AttachWindow(mainWindow) + + // 设置窗口防抖时间 + systray.WindowDebounce(200 * time.Millisecond) +} diff --git a/main.go b/main.go index dd8eddf..a4b505e 100644 --- a/main.go +++ b/main.go @@ -6,6 +6,7 @@ import ( "log" "time" "voidraft/internal/services" + "voidraft/internal/systray" "github.com/wailsapp/wails/v3/pkg/application" ) @@ -60,21 +61,8 @@ func main() { URL: "/", }) - systray := app.NewSystemTray() - iconBytes, _ := assets.ReadFile("appicon.png") - systray.SetIcon(iconBytes) - systray.SetLabel("VoidRaft") - menu := app.NewMenu() - menu.Add("显示主窗口").OnClick(func(data *application.Context) { - mainWindow.Show() - }) - menu.AddSeparator() - menu.Add("退出").OnClick(func(data *application.Context) { - app.Quit() - }) - systray.SetMenu(menu) - systray.AttachWindow(mainWindow) - systray.WindowDebounce(200 * time.Millisecond) + // 设置系统托盘 + systray.SetupSystemTray(app, mainWindow, assets) // Create a goroutine that emits an event containing the current time every second. // The frontend can listen to this event and update the UI accordingly.