Register Windows notification icon via metadata after NewWindow.
Fyne toasts read App.Icon without SetIcon, preserving the PE multi-size window and taskbar icon while giving failure notifications app artwork. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -44,6 +44,8 @@ import (
|
|||||||
// - Tray: SetSystemTrayIcon(IconSmallICO()). The notification area is ICO-native
|
// - Tray: SetSystemTrayIcon(IconSmallICO()). The notification area is ICO-native
|
||||||
// and renders at 16-24px; a single-frame 16x16 .ico pins the hand-tuned glyph
|
// and renders at 16-24px; a single-frame 16x16 .ico pins the hand-tuned glyph
|
||||||
// (a multi-size .ico made the tray pick and downscale a larger frame).
|
// (a multi-size .ico made the tray pick and downscale a larger frame).
|
||||||
|
// - Desktop toasts: AppMetadata.Icon (set after NewWindow in run.go) feeds
|
||||||
|
// SendNotification without calling SetIcon, which would override GLFW_ICON.
|
||||||
//
|
//
|
||||||
// Linux / other non-Windows (no PE icon resource exists):
|
// Linux / other non-Windows (no PE icon resource exists):
|
||||||
// - Window titlebar: a.SetIcon(IconSmall()) in run.go feeds the resource to
|
// - Window titlebar: a.SetIcon(IconSmall()) in run.go feeds the resource to
|
||||||
|
|||||||
@@ -4,6 +4,12 @@ All notable GoSentry changes are recorded in this file.
|
|||||||
|
|
||||||
## 1.0.1 - 2026-08-04
|
## 1.0.1 - 2026-08-04
|
||||||
|
|
||||||
|
**Windows failure notifications can show the app icon (experimental).**
|
||||||
|
|
||||||
|
- **`ui.run`** — after `NewWindow`, register `AppMetadata.Icon` on Windows so
|
||||||
|
Fyne toasts pick up artwork without calling `SetIcon`, which would override
|
||||||
|
the PE multi-size window/taskbar icon.
|
||||||
|
|
||||||
**Sample jobs include a disabled failure test for desktop notifications.**
|
**Sample jobs include a disabled failure test for desktop notifications.**
|
||||||
|
|
||||||
- **`storage.defaultJobs`** — new disabled example *Failure notification test*
|
- **`storage.defaultJobs`** — new disabled example *Failure notification test*
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ func Run(startInTray bool) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
w := a.NewWindow("GoSentry " + app.Version)
|
w := a.NewWindow("GoSentry " + app.Version)
|
||||||
|
setWindowsNotificationIcon()
|
||||||
prefs := a.Preferences()
|
prefs := a.Preferences()
|
||||||
winW := float32(prefs.FloatWithFallback("window.width", defaultWindowWidth))
|
winW := float32(prefs.FloatWithFallback("window.width", defaultWindowWidth))
|
||||||
winH := float32(prefs.FloatWithFallback("window.height", defaultWindowHeight))
|
winH := float32(prefs.FloatWithFallback("window.height", defaultWindowHeight))
|
||||||
@@ -94,3 +95,20 @@ func Run(startInTray bool) {
|
|||||||
recordStartup(time.Since(started), true)
|
recordStartup(time.Since(started), true)
|
||||||
a.Run()
|
a.Run()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// setWindowsNotificationIcon supplies App.Icon for Fyne desktop notifications
|
||||||
|
// without touching the window or taskbar icon. On Windows those come from the PE
|
||||||
|
// gosentry.ico resource, so run.go must not call SetIcon. Fyne's NewWindow ends
|
||||||
|
// with SetIcon(nil), which adopts App.Icon when it is already set — metadata
|
||||||
|
// must therefore be registered only after the window is created. The tray icon
|
||||||
|
// is set separately in tray.go via SetSystemTrayIcon.
|
||||||
|
func setWindowsNotificationIcon() {
|
||||||
|
if runtime.GOOS != "windows" {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
fyneapp.SetMetadata(fyne.AppMetadata{
|
||||||
|
ID: appID,
|
||||||
|
Name: "GoSentry",
|
||||||
|
Icon: assets.Icon(),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user