Description
When the systray icon is hidden in the flyout thingy on windows and the systray doesn't have a window attached, the application crashes if you left click the app.
go
callstack:
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x0 pc=0x9586f4]
goroutine 1 [running, locked to thread]:
github.com/wailsapp/wails/v3/pkg/application.(*windowsSystemTray).openMenu(0xc0001d4340)
C:/Users/calle/source/wails/v3/pkg/application/systemtray_windows.go:44 +0x34
github.com/wailsapp/wails/v3/pkg/application.InvokeSync.func1()
C:/Users/calle/source/wails/v3/pkg/application/mainthread.go:28 +0x42
github.com/wailsapp/wails/v3/pkg/application.(*App).dispatchOnMainThread(0xc0000f3348, 0xc000126240)
C:/Users/calle/source/wails/v3/pkg/application/application.go:743 +0xcb
github.com/wailsapp/wails/v3/pkg/application.InvokeSync(0xc000126228)
C:/Users/calle/source/wails/v3/pkg/application/mainthread.go:26 +0x94
github.com/wailsapp/wails/v3/pkg/application.(*SystemTray).OpenMenu(...)
C:/Users/calle/source/wails/v3/pkg/application/systemtray.go:298
github.com/wailsapp/wails/v3/pkg/application.(*SystemTray).defaultClickHandler(0xc0000b6601?)
C:/Users/calle/source/wails/v3/pkg/application/systemtray.go:269 +0x156
github.com/wailsapp/wails/v3/pkg/application.(*windowsSystemTray).wndProc(0xc0001d4340, 0x401, 0x3050498, 0x10202)
C:/Users/calle/source/wails/v3/pkg/application/systemtray_windows.go:281 +0x6e
github.com/wailsapp/wails/v3/pkg/application.(*windowsApp).wndProc(0xc0002280e0, 0xe0584, 0x401, 0x3050498, 0x10202)
C:/Users/calle/source/wails/v3/pkg/application/application_windows.go:281 +0x4fe
syscall.SyscallN(0x1c44fc61348?, {0xc000480000?, 0x0?, 0xc000480000?})
C:/Program Files/Go/src/runtime/syscall_windows.go:544 +0x107
syscall.(*Proc).Call(0x472385?, {0xc000480000?, 0x9bccc0?, 0x2701?})
C:/Program Files/Go/src/syscall/dll_windows.go:166 +0x1c
syscall.(*LazyProc).Call(0xf9eae0, {0xc000480000, 0x4, 0x4})
C:/Program Files/Go/src/syscall/dll_windows.go:286 +0x4a
github.com/wailsapp/wails/v3/pkg/w32.GetMessage(...)
C:/Users/calle/source/wails/v3/pkg/w32/user32.go:423
github.com/wailsapp/wails/v3/pkg/application.(*windowsApp).runMainLoop(0xc0002280e0)
C:/Users/calle/source/wails/v3/pkg/application/mainthread_windows.go:62 +0x174
github.com/wailsapp/wails/v3/pkg/application.(*windowsApp).run(0xc0002280e0)
C:/Users/calle/source/wails/v3/pkg/application/application_windows.go:189 +0xd2
github.com/wailsapp/wails/v3/pkg/application.(*App).Run(0xc0000f3348)
C:/Users/calle/source/wails/v3/pkg/application/application.go:537 +0x3d3
main.main()
C:/Users/calle/source/wails/v3/examples/systray/main.go:66 +0x516
[0221/195318.555:ERROR:window_impl.cc(120)] Failed to unregister class Chrome_WidgetWin_0. Error = 0
exit status 2```
This is caused by double nil return here:
```go
// in func(s *windowsSystemTray) bounds() (*Rect, error)
flyoutOpen := !w32.RectInRect(bounds, &taskbarRect.Rc)
flyoutOpen := !w32.RectInRect(bounds, &taskbarRect.Rc)
if flyoutOpen {
return nil, nil
}
To Reproduce
Buidl and run the below code on windows, then move the icon in the sys tray to the flyout thingy and then left click the sys tray icon
package main
import (
_ "embed"
"log"
"github.com/wailsapp/wails/v3/pkg/application"
"github.com/wailsapp/wails/v3/pkg/icons"
)
func main() {
app := application.New(application.Options{
Name: "Systray Demo",
Description: "A demo of the Systray API",
Assets: application.AlphaAssets,
})
systemTray := app.NewSystemTray()
window := app.NewWebviewWindowWithOptions(application.WebviewWindowOptions{
Width: 400,
Height: 400,
Frameless: false,
AlwaysOnTop: true,
Hidden: true,
DisableResize: true,
ShouldClose: func(window *application.WebviewWindow) bool {
window.Hide()
return false
},
Windows: application.WindowsWindow{
HiddenOnTaskbar: false,
},
KeyBindings: map[string]func(window *application.WebviewWindow){
"F12": func(window *application.WebviewWindow) {
systemTray.OpenMenu()
},
},
})
systemTray.SetIcon(icons.SystrayLight)
systemTray.SetDarkModeIcon(icons.SystrayLight)
myMenu := app.NewMenu()
myMenu.Add("Wails").SetBitmap(icons.WailsLogoBlackTransparent).SetEnabled(false)
myMenu.Add("Show Window").OnClick(func(ctx *application.Context) {
window.Show()
})
myMenu.AddSeparator()
myMenu.Add("Quit").OnClick(func(ctx *application.Context) {
app.Quit()
})
systemTray.SetMenu(myMenu)
err := app.Run()
if err != nil {
log.Fatal(err)
}
}
### Expected behaviour
The application should open the systray menu and not crash
### Screenshots
_No response_
### Attempted Fixes
_No response_
### System Details
```shell
wails3 doctor
Wails Doctor
# Build Environment
Wails CLI | v3.0.0-alpha.3
Go Version | go1.22.0
Revision | 12d12a33dec1d31f487b70f87bc31e80252f327c
Modified | false
-buildmode | exe
-compiler | gc
CGO_ENABLED | 0
DefaultGODEBUG | httplaxcontentlength=1,httpmuxgo121=1,tls10server=1,tlsrsakex=1,tlsunsafeekm=1
GOAMD64 | v1
GOARCH | amd64
GOOS | windows
vcs | git
vcs.modified | false
vcs.revision | 12d12a33dec1d31f487b70f87bc31e80252f327c
vcs.time | 2024-02-21T12:40:32Z
# System
Name | Windows 10 Pro
Version | 2009 (Build: 22631)
ID | 23H2
Branding | Windows 11 Pro
Platform | windows
Architecture | amd64
Go WebView2Loader | true
NSIS | Not Installed
WebView2 Version | 121.0.2277.128
CPU | AMD Ryzen 7 3700X 8-Core Processor
GPU 1 | Microsoft Remote Display Adapter (Microsoft) - Driver: 10.0.22621.2861
GPU 2 | NVIDIA GeForce RTX 2070 SUPER (NVIDIA) - Driver: 31.0.15.3623
Memory | 32GB
# Diagnosis
SUCCESS Your system is ready for Wails development!
Additional context
No response
Description
When the systray icon is hidden in the flyout thingy on windows and the systray doesn't have a window attached, the application crashes if you left click the app.
gocallstack:
To Reproduce
Buidl and run the below code on windows, then move the icon in the sys tray to the flyout thingy and then left click the sys tray icon
Additional context
No response