返回 DeepSeek-Reasonix
tray_loop_windows.go
根目录 / desktop / tray_loop_windows.go
1 //go:build windows
2
3 package main
4
5 import (
6 "log/slog"
7 "os"
8 "runtime"
9
10 "fyne.io/systray"
11 "reasonix/desktop/internal/instanceidentity"
12 )
13
14 var verifyTraySignatureFn = verifyTraySignature
15
16 func signedTrayIdentity(dev, exe, id string, verify func(string) error) string {
17 if dev != "" || exe == "" || verify(exe) != nil {
18 return ""
19 }
20 return instanceidentity.TrayGUID(id)
21 }
22
23 func startDesktopTray(onReady, onExit func()) func() {
24 go runDesktopTrayLoop(func() {
25 exe, _ := os.Executable()
26 if id := signedTrayIdentity(os.Getenv("REASONIX_DEV"), exe, singleInstanceID(), verifyTraySignatureFn); id != "" {
27 if err := systray.SetIconID(id); err != nil {
28 slog.Warn("desktop: configure tray identity", "err", err)
29 }
30 }
31 systray.Run(onReady, onExit)
32 })
33 return systray.Quit
34 }
35
36 func runDesktopTrayLoop(run func()) {
37 runtime.LockOSThread()
38 defer runtime.UnlockOSThread()
39 run()
40 }
41
41 lines GO