package main import ( "log" "sync" "fyne.io/fyne/v2" "fyne.io/fyne/v2/app" "fyne.io/fyne/v2/canvas" "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/driver/desktop" "golang.design/x/hotkey" ) func main() { a := app.New() w := a.NewWindow("SysTray") icon, _ := fyne.LoadResourceFromPath("./keyboard.svg") if desk, ok := a.(desktop.App); ok { m := fyne.NewMenu("MyApp", fyne.NewMenuItem("Show", func() { w.Show() })) desk.SetSystemTrayMenu(m) desk.SetSystemTrayIcon(icon) } // image := canvas.NewImageFromResource(theme.ConfirmIcon()) layer_1 := canvas.NewImageFromFile("./layer_1.png") layer_1.Translucency = 0.5 layer_2 := canvas.NewImageFromFile("./layer_2.png") layer_2.Translucency = 0.5 w.SetContent(container.NewPadded(layer_1)) w.Resize(fyne.Size{ Width: 1656 / 2, Height: 546 / 2, }) // w.SetContent(widget.NewLabel("Fyne System Tray")) w.SetCloseIntercept(func() { w.Hide() }) go func() { wg := sync.WaitGroup{} wg.Add(2) go func() { defer wg.Done() err := listenHotkey( func() { w.SetContent(container.NewPadded(layer_1)) }, func() { w.SetContent(container.NewPadded(layer_2)) }, hotkey.Key1, ) if err != nil { log.Println(err) } }() go func() { defer wg.Done() err := listenHotkey( func() { w.SetContent(container.NewPadded(layer_1)) }, func() { log.Println("up") }, hotkey.Key2, ) if err != nil { log.Println(err) } }() wg.Wait() }() w.ShowAndRun() } func listenHotkey(upfn func(), downfn func(), key hotkey.Key, mods ...hotkey.Modifier) (err error) { ms := []hotkey.Modifier{} ms = append(ms, mods...) hk := hotkey.New(ms, key) err = hk.Register() if err != nil { return } for { select { case <-hk.Keyup(): go upfn() case <-hk.Keydown(): go downfn() } } }