Browse Source

Win32 tray icon: avoid HIcon access when removing

Prevents a crash when the TrayIconImpl finalizer runs after the System.Drawing.Icon has been disposed
pull/10295/head
Julien Lebosquain 3 years ago
parent
commit
1c9032dd72
No known key found for this signature in database GPG Key ID: 1833CAD10ACC46FD
  1. 14
      src/Windows/Avalonia.Win32/TrayIconImpl.cs

14
src/Windows/Avalonia.Win32/TrayIconImpl.cs

@ -81,19 +81,18 @@ namespace Avalonia.Win32
private void UpdateIcon(bool remove = false)
{
var iconData = new NOTIFYICONDATA()
var iconData = new NOTIFYICONDATA
{
hWnd = Win32Platform.Instance.Handle,
uID = _uniqueId,
uFlags = NIF.TIP | NIF.MESSAGE,
uCallbackMessage = (int)CustomWindowsMessage.WM_TRAYMOUSE,
hIcon = _icon?.HIcon ?? s_emptyIcon,
szTip = _tooltipText ?? ""
uID = _uniqueId
};
if (!remove)
{
iconData.uFlags |= NIF.ICON;
iconData.uFlags = NIF.TIP | NIF.MESSAGE | NIF.ICON;
iconData.uCallbackMessage = (int)CustomWindowsMessage.WM_TRAYMOUSE;
iconData.hIcon = _icon?.HIcon ?? s_emptyIcon;
iconData.szTip = _tooltipText ?? "";
if (!_iconAdded)
{
@ -107,6 +106,7 @@ namespace Avalonia.Win32
}
else
{
iconData.uFlags = 0;
Shell_NotifyIcon(NIM.DELETE, iconData);
_iconAdded = false;
}

Loading…
Cancel
Save