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

Loading…
Cancel
Save