diff --git a/packages/tray_manager/windows/tray_manager_plugin.cpp b/packages/tray_manager/windows/tray_manager_plugin.cpp index 59e98d6..91a42a7 100644 --- a/packages/tray_manager/windows/tray_manager_plugin.cpp +++ b/packages/tray_manager/windows/tray_manager_plugin.cpp @@ -46,8 +46,8 @@ class TrayManagerPlugin : public flutter::Plugin { std::wstring_convert> g_converter; flutter::PluginRegistrarWindows* registrar; - NOTIFYICONDATA nid; - NOTIFYICONIDENTIFIER niif; + NOTIFYICONDATA nid{}; + NOTIFYICONIDENTIFIER niif{}; // do create pop-up menu only once. HMENU hMenu = CreatePopupMenu(); bool tray_icon_setted = false; @@ -186,7 +186,10 @@ std::optional TrayManagerPlugin::HandleWindowProc(HWND hWnd, if (message == WM_DESTROY) { if (tray_icon_setted) { Shell_NotifyIcon(NIM_DELETE, &nid); - DestroyIcon(nid.hIcon); + if (nid.hIcon != nullptr) { + DestroyIcon(nid.hIcon); + nid.hIcon = nullptr; + } } } else if (message == WM_COMMAND) { flutter::EncodableMap eventData = flutter::EncodableMap(); @@ -241,7 +244,10 @@ void TrayManagerPlugin::Destroy( const flutter::MethodCall& method_call, std::unique_ptr> result) { Shell_NotifyIcon(NIM_DELETE, &nid); - DestroyIcon(nid.hIcon); + if (nid.hIcon != nullptr) { + DestroyIcon(nid.hIcon); + nid.hIcon = nullptr; + } tray_icon_setted = false; result->Success(flutter::EncodableValue(true));