From 15ad2e8ab7c040201e0119b9b38d50ffb8515841 Mon Sep 17 00:00:00 2001 From: simon Date: Tue, 25 Sep 2001 20:05:06 +0000 Subject: [PATCH] John Sullivan's patch to recreate the Pageant systray icon if Explorer crashes and restarts while Pageant is running. git-svn-id: svn://svn.tartarus.org/sgt/putty@1299 cda61777-01e9-0310-a592-d414129be87e --- pageant.c | 78 ++++++++++++++++++++++++++++++++++++++------------------------- 1 file changed, 47 insertions(+), 31 deletions(-) diff --git a/pageant.c b/pageant.c index a7efcada..1e02b4af 100644 --- a/pageant.c +++ b/pageant.c @@ -1075,13 +1075,51 @@ static int CALLBACK KeyListProc(HWND hwnd, UINT msg, return 0; } +/* Set up a system tray icon */ +static BOOL AddTrayIcon(HWND hwnd) +{ + BOOL res; + NOTIFYICONDATA tnid; + HICON hicon; + +#ifdef NIM_SETVERSION + tnid.uVersion = 0; + res = Shell_NotifyIcon(NIM_SETVERSION, &tnid); +#endif + + tnid.cbSize = sizeof(NOTIFYICONDATA); + tnid.hWnd = hwnd; + tnid.uID = 1; /* unique within this systray use */ + tnid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; + tnid.uCallbackMessage = WM_SYSTRAY; + tnid.hIcon = hicon = LoadIcon(instance, MAKEINTRESOURCE(201)); + strcpy(tnid.szTip, "Pageant (PuTTY authentication agent)"); + + res = Shell_NotifyIcon(NIM_ADD, &tnid); + + if (hicon) DestroyIcon(hicon); + + return res; +} + static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { int ret; static int menuinprogress; + static UINT msgTaskbarCreated = 0; switch (message) { + case WM_CREATE: + msgTaskbarCreated = RegisterWindowMessage(_T("TaskbarCreated")); + break; + default: + if (message==msgTaskbarCreated) { + // Explorer has been restarted, so the tray icon will have been lost + AddTrayIcon(hwnd); + } + break; + case WM_SYSTRAY: if (lParam == WM_RBUTTONUP) { POINT cursorpos; @@ -1342,37 +1380,15 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) 100, 100, NULL, NULL, inst, NULL); /* Set up a system tray icon */ - { - BOOL res; - NOTIFYICONDATA tnid; - HICON hicon; - -#ifdef NIM_SETVERSION - tnid.uVersion = 0; - res = Shell_NotifyIcon(NIM_SETVERSION, &tnid); -#endif - - tnid.cbSize = sizeof(NOTIFYICONDATA); - tnid.hWnd = hwnd; - tnid.uID = 1; /* unique within this systray use */ - tnid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; - tnid.uCallbackMessage = WM_SYSTRAY; - tnid.hIcon = hicon = LoadIcon(instance, MAKEINTRESOURCE(201)); - strcpy(tnid.szTip, "Pageant (PuTTY authentication agent)"); - - res = Shell_NotifyIcon(NIM_ADD, &tnid); - - if (hicon) - DestroyIcon(hicon); - - systray_menu = CreatePopupMenu(); - /* accelerators used: vkxa */ - AppendMenu(systray_menu, MF_ENABLED, IDM_VIEWKEYS, - "&View Keys"); - AppendMenu(systray_menu, MF_ENABLED, IDM_ADDKEY, "Add &Key"); - AppendMenu(systray_menu, MF_ENABLED, IDM_ABOUT, "&About"); - AppendMenu(systray_menu, MF_ENABLED, IDM_CLOSE, "E&xit"); - } + AddTrayIcon(hwnd); + + systray_menu = CreatePopupMenu(); + /* accelerators used: vkxa */ + AppendMenu(systray_menu, MF_ENABLED, IDM_VIEWKEYS, + "&View Keys"); + AppendMenu(systray_menu, MF_ENABLED, IDM_ADDKEY, "Add &Key"); + AppendMenu(systray_menu, MF_ENABLED, IDM_ABOUT, "&About"); + AppendMenu(systray_menu, MF_ENABLED, IDM_CLOSE, "E&xit"); ShowWindow(hwnd, SW_HIDE); -- 2.11.0