mirror of
https://github.com/reactos/reactos.git
synced 2024-09-29 14:09:10 +00:00
[KBSWITCH] Fix notification icon handle leak
This commit is contained in:
parent
eca08cfe98
commit
82db0523e4
|
@ -28,6 +28,7 @@ HINSTANCE hInst;
|
||||||
HANDLE hProcessHeap;
|
HANDLE hProcessHeap;
|
||||||
HMODULE hDllLib;
|
HMODULE hDllLib;
|
||||||
ULONG ulCurrentLayoutNum = 1;
|
ULONG ulCurrentLayoutNum = 1;
|
||||||
|
HICON g_hNotifyIcon = NULL;
|
||||||
|
|
||||||
static HICON
|
static HICON
|
||||||
CreateTrayIcon(LPTSTR szLCID)
|
CreateTrayIcon(LPTSTR szLCID)
|
||||||
|
@ -98,55 +99,50 @@ CreateTrayIcon(LPTSTR szLCID)
|
||||||
static VOID
|
static VOID
|
||||||
AddTrayIcon(HWND hwnd)
|
AddTrayIcon(HWND hwnd)
|
||||||
{
|
{
|
||||||
NOTIFYICONDATA tnid;
|
NOTIFYICONDATA tnid = { sizeof(tnid), hwnd, 1, NIF_ICON | NIF_MESSAGE | NIF_TIP };
|
||||||
TCHAR szLCID[CCH_LAYOUT_ID + 1];
|
TCHAR szLCID[CCH_LAYOUT_ID + 1];
|
||||||
TCHAR szName[MAX_PATH];
|
TCHAR szName[MAX_PATH];
|
||||||
|
|
||||||
GetLayoutID(_T("1"), szLCID, ARRAYSIZE(szLCID));
|
GetLayoutID(_T("1"), szLCID, ARRAYSIZE(szLCID));
|
||||||
GetLayoutName(_T("1"), szName, ARRAYSIZE(szName));
|
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.uCallbackMessage = WM_NOTIFYICONMSG;
|
||||||
tnid.hIcon = CreateTrayIcon(szLCID);
|
tnid.hIcon = CreateTrayIcon(szLCID);
|
||||||
|
|
||||||
StringCchCopy(tnid.szTip, ARRAYSIZE(tnid.szTip), szName);
|
StringCchCopy(tnid.szTip, ARRAYSIZE(tnid.szTip), szName);
|
||||||
|
|
||||||
Shell_NotifyIcon(NIM_ADD, &tnid);
|
Shell_NotifyIcon(NIM_ADD, &tnid);
|
||||||
|
|
||||||
|
if (g_hNotifyIcon)
|
||||||
|
DestroyIcon(g_hNotifyIcon);
|
||||||
|
g_hNotifyIcon = tnid.hIcon;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VOID
|
static VOID
|
||||||
DelTrayIcon(HWND hwnd)
|
DeleteTrayIcon(HWND hwnd)
|
||||||
{
|
{
|
||||||
NOTIFYICONDATA tnid;
|
NOTIFYICONDATA tnid = { sizeof(tnid), hwnd, 1 };
|
||||||
|
|
||||||
memset(&tnid, 0, sizeof(tnid));
|
|
||||||
tnid.cbSize = sizeof(NOTIFYICONDATA);
|
|
||||||
tnid.hWnd = hwnd;
|
|
||||||
tnid.uID = 1;
|
|
||||||
|
|
||||||
Shell_NotifyIcon(NIM_DELETE, &tnid);
|
Shell_NotifyIcon(NIM_DELETE, &tnid);
|
||||||
|
|
||||||
|
if (g_hNotifyIcon)
|
||||||
|
{
|
||||||
|
DestroyIcon(g_hNotifyIcon);
|
||||||
|
g_hNotifyIcon = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static VOID
|
static VOID
|
||||||
UpdateTrayIcon(HWND hwnd, LPTSTR szLCID, LPTSTR szName)
|
UpdateTrayIcon(HWND hwnd, LPTSTR szLCID, LPTSTR szName)
|
||||||
{
|
{
|
||||||
NOTIFYICONDATA tnid;
|
NOTIFYICONDATA tnid = { sizeof(tnid), hwnd, 1, NIF_ICON | NIF_MESSAGE | NIF_TIP };
|
||||||
|
|
||||||
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.uCallbackMessage = WM_NOTIFYICONMSG;
|
||||||
tnid.hIcon = CreateTrayIcon(szLCID);
|
tnid.hIcon = CreateTrayIcon(szLCID);
|
||||||
|
|
||||||
StringCchCopy(tnid.szTip, ARRAYSIZE(tnid.szTip), szName);
|
StringCchCopy(tnid.szTip, ARRAYSIZE(tnid.szTip), szName);
|
||||||
|
|
||||||
Shell_NotifyIcon(NIM_MODIFY, &tnid);
|
Shell_NotifyIcon(NIM_MODIFY, &tnid);
|
||||||
|
|
||||||
|
if (g_hNotifyIcon)
|
||||||
|
DestroyIcon(g_hNotifyIcon);
|
||||||
|
g_hNotifyIcon = tnid.hIcon;
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL
|
static BOOL
|
||||||
|
@ -560,7 +556,7 @@ WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
|
||||||
DoUnregisterAltShiftHotKeys(hwnd);
|
DoUnregisterAltShiftHotKeys(hwnd);
|
||||||
DeleteHooks();
|
DeleteHooks();
|
||||||
DestroyMenu(s_hMenu);
|
DestroyMenu(s_hMenu);
|
||||||
DelTrayIcon(hwnd);
|
DeleteTrayIcon(hwnd);
|
||||||
PostQuitMessage(0);
|
PostQuitMessage(0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue