From 82db0523e4c1e6c53fbe8c8eadc813b429dce3b5 Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Wed, 24 Aug 2022 12:18:59 +0900 Subject: [PATCH] [KBSWITCH] Fix notification icon handle leak --- base/applications/kbswitch/kbswitch.c | 44 ++++++++++++--------------- 1 file changed, 20 insertions(+), 24 deletions(-) diff --git a/base/applications/kbswitch/kbswitch.c b/base/applications/kbswitch/kbswitch.c index 6f4413f8f03..6a5680a4212 100644 --- a/base/applications/kbswitch/kbswitch.c +++ b/base/applications/kbswitch/kbswitch.c @@ -28,6 +28,7 @@ HINSTANCE hInst; HANDLE hProcessHeap; HMODULE hDllLib; ULONG ulCurrentLayoutNum = 1; +HICON g_hNotifyIcon = NULL; static HICON CreateTrayIcon(LPTSTR szLCID) @@ -98,55 +99,50 @@ CreateTrayIcon(LPTSTR szLCID) static VOID AddTrayIcon(HWND hwnd) { - NOTIFYICONDATA tnid; + NOTIFYICONDATA tnid = { sizeof(tnid), hwnd, 1, NIF_ICON | NIF_MESSAGE | NIF_TIP }; TCHAR szLCID[CCH_LAYOUT_ID + 1]; TCHAR szName[MAX_PATH]; GetLayoutID(_T("1"), szLCID, ARRAYSIZE(szLCID)); GetLayoutName(_T("1"), szName, ARRAYSIZE(szName)); - memset(&tnid, 0, sizeof(tnid)); - tnid.cbSize = sizeof(NOTIFYICONDATA); - tnid.hWnd = hwnd; - tnid.uID = 1; - tnid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; tnid.uCallbackMessage = WM_NOTIFYICONMSG; tnid.hIcon = CreateTrayIcon(szLCID); - StringCchCopy(tnid.szTip, ARRAYSIZE(tnid.szTip), szName); Shell_NotifyIcon(NIM_ADD, &tnid); + + if (g_hNotifyIcon) + DestroyIcon(g_hNotifyIcon); + g_hNotifyIcon = tnid.hIcon; } static VOID -DelTrayIcon(HWND hwnd) +DeleteTrayIcon(HWND hwnd) { - NOTIFYICONDATA tnid; - - memset(&tnid, 0, sizeof(tnid)); - tnid.cbSize = sizeof(NOTIFYICONDATA); - tnid.hWnd = hwnd; - tnid.uID = 1; - + NOTIFYICONDATA tnid = { sizeof(tnid), hwnd, 1 }; Shell_NotifyIcon(NIM_DELETE, &tnid); + + if (g_hNotifyIcon) + { + DestroyIcon(g_hNotifyIcon); + g_hNotifyIcon = NULL; + } } static VOID UpdateTrayIcon(HWND hwnd, LPTSTR szLCID, LPTSTR szName) { - NOTIFYICONDATA tnid; - - memset(&tnid, 0, sizeof(tnid)); - tnid.cbSize = sizeof(NOTIFYICONDATA); - tnid.hWnd = hwnd; - tnid.uID = 1; - tnid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; + NOTIFYICONDATA tnid = { sizeof(tnid), hwnd, 1, NIF_ICON | NIF_MESSAGE | NIF_TIP }; tnid.uCallbackMessage = WM_NOTIFYICONMSG; tnid.hIcon = CreateTrayIcon(szLCID); - StringCchCopy(tnid.szTip, ARRAYSIZE(tnid.szTip), szName); Shell_NotifyIcon(NIM_MODIFY, &tnid); + + if (g_hNotifyIcon) + DestroyIcon(g_hNotifyIcon); + g_hNotifyIcon = tnid.hIcon; } static BOOL @@ -560,7 +556,7 @@ WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) DoUnregisterAltShiftHotKeys(hwnd); DeleteHooks(); DestroyMenu(s_hMenu); - DelTrayIcon(hwnd); + DeleteTrayIcon(hwnd); PostQuitMessage(0); break; }