From: jacob Date: Tue, 1 Mar 2005 01:16:57 +0000 (+0000) Subject: Add context help to a couple of message boxes. Unfortunately the ones X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/putty/commitdiff_plain/2833957974b5c33f4470ef8772efd6ba746d205b Add context help to a couple of message boxes. Unfortunately the ones I wanted to get to -- "software caused connection abort" and friends -- are going to be more involved (probably requiring some cross-platform notion of help contexts), and these ones hardly seem worth the effort. Still, I've done it now. Side-effect: Pageant now uses the same `hinst' and `hwnd' globals as everything else. Tested basic functionality. git-svn-id: svn://svn.tartarus.org/sgt/putty@5417 cda61777-01e9-0310-a592-d414129be87e --- diff --git a/doc/errors.but b/doc/errors.but index 771c7ec1..2c4385e6 100644 --- a/doc/errors.but +++ b/doc/errors.but @@ -130,9 +130,11 @@ Similarly, any error message starting with \q{Assertion failed} is a bug in PuTTY. Please report it to us, and include the exact text from the error message box. -\H{errors-key-wrong-format} \q{Unable to use this private key file}, +\H{errors-cant-load-key} \q{Unable to use this private key file}, \q{Couldn't load private key}, \q{Key is of wrong type} +\cfg{winhelp-topic}{errors.cantloadkey} + Various forms of this error are printed in the PuTTY window, or written to the PuTTY Event Log (see \k{using-eventlog}) when trying public-key authentication, or given by Pageant when trying to load a diff --git a/doc/using.but b/doc/using.but index 81dc5529..46d5f164 100644 --- a/doc/using.but +++ b/doc/using.but @@ -516,6 +516,8 @@ use the \c{-load} option (described in \k{using-cmdline-load}). \S{using-cleanup} \i\c{-cleanup} +\cfg{winhelp-topic}{options.cleanup} + If invoked with the \c{-cleanup} option, rather than running as normal, PuTTY will remove its \I{removing registry entries}registry entries and \I{random seed file} from the local machine (after diff --git a/windows/window.c b/windows/window.c index b3d350b4..21058887 100644 --- a/windows/window.c +++ b/windows/window.c @@ -299,6 +299,7 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) int guess_width, guess_height; hinst = inst; + hwnd = NULL; flags = FLAG_VERBOSE | FLAG_INTERACTIVE; sk_init(); @@ -451,8 +452,8 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) "SESSIONS. Are you really sure you want\n" "to continue?", appname); s2 = dupprintf("%s Warning", appname); - if (MessageBox(NULL, s1, s2, - MB_YESNO | MB_ICONWARNING) == IDYES) { + if (message_box(s1, s2, MB_YESNO | MB_ICONWARNING, + HELPCTXID(option_cleanup)) == IDYES) { cleanup_all(); } sfree(s1); @@ -597,8 +598,6 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) RegisterClass(&wndclass); } - hwnd = NULL; - memset(&ucsdata, 0, sizeof(ucsdata)); cfgtopalette(); diff --git a/windows/winhelp.h b/windows/winhelp.h index 34cfd93f..51e1b9c4 100644 --- a/windows/winhelp.h +++ b/windows/winhelp.h @@ -3,6 +3,7 @@ * the \cfg{winhelp-topic} directives in the Halibut source. */ +/* Maximum length for WINHELP_CTX_foo strings */ #define WINHELP_CTX_MAXLEN 80 /* These are used in the cross-platform configuration dialog code. */ @@ -137,3 +138,7 @@ #define WINHELP_CTXID_errors_hostkey_absent 1 #define WINHELP_CTX_errors_hostkey_changed "errors.hostkey.changed" #define WINHELP_CTXID_errors_hostkey_changed 2 +#define WINHELP_CTX_errors_cantloadkey "errors.cantloadkey" +#define WINHELP_CTXID_errors_cantloadkey 3 +#define WINHELP_CTX_option_cleanup "options.cleanup" +#define WINHELP_CTXID_option_cleanup 4 diff --git a/windows/winpgen.c b/windows/winpgen.c index eac66dec..d027fc78 100644 --- a/windows/winpgen.c +++ b/windows/winpgen.c @@ -633,8 +633,8 @@ void load_key_file(HWND hwnd, struct MainDlgState *state, !import_possible(type)) { char *msg = dupprintf("Couldn't load private key (%s)", key_type_to_str(type)); - MessageBox(NULL, msg, - "PuTTYgen Error", MB_OK | MB_ICONERROR); + message_box(msg, "PuTTYgen Error", MB_OK | MB_ICONERROR, + HELPCTXID(errors_cantloadkey)); sfree(msg); return; } @@ -695,7 +695,8 @@ void load_key_file(HWND hwnd, struct MainDlgState *state, sfree(comment); if (ret == 0) { char *msg = dupprintf("Couldn't load private key (%s)", errmsg); - MessageBox(NULL, msg, "PuTTYgen Error", MB_OK | MB_ICONERROR); + message_box(msg, "PuTTYgen Error", MB_OK | MB_ICONERROR, + HELPCTXID(errors_cantloadkey)); sfree(msg); } else if (ret == 1) { /* @@ -1415,6 +1416,7 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) InitCommonControls(); hinst = inst; + hwnd = NULL; /* * See if we can find our Help file. diff --git a/windows/winpgnt.c b/windows/winpgnt.c index e37043e9..e128949c 100644 --- a/windows/winpgnt.c +++ b/windows/winpgnt.c @@ -50,8 +50,6 @@ extern char ver[]; -static HINSTANCE instance; -static HWND main_hwnd; static HWND keylist; static HWND aboutbox; static HMENU systray_menu, session_menu; @@ -80,7 +78,7 @@ void modalfatalbox(char *fmt, ...) va_start(ap, fmt); buf = dupvprintf(fmt, ap); va_end(ap); - MessageBox(main_hwnd, buf, "Pageant Fatal Error", + MessageBox(hwnd, buf, "Pageant Fatal Error", MB_SYSTEMMODAL | MB_ICONERROR | MB_OK); sfree(buf); exit(1); @@ -142,7 +140,7 @@ static void *get_keylist2(int *length); */ int random_byte(void) { - MessageBox(main_hwnd, "Internal Error", APPNAME, MB_OK | MB_ICONERROR); + MessageBox(hwnd, "Internal Error", APPNAME, MB_OK | MB_ICONERROR); exit(0); /* this line can't be reached but it placates MSVC's warnings :-) */ return 0; @@ -236,7 +234,7 @@ static int CALLBACK AboutProc(HWND hwnd, UINT msg, return 0; case 101: EnableWindow(hwnd, 0); - DialogBox(instance, MAKEINTRESOURCE(214), hwnd, LicenceProc); + DialogBox(hinst, MAKEINTRESOURCE(214), hwnd, LicenceProc); EnableWindow(hwnd, 1); SetActiveWindow(hwnd); return 0; @@ -412,9 +410,11 @@ static void add_keyfile(Filename filename) type = key_type(&filename); if (type != SSH_KEYTYPE_SSH1 && type != SSH_KEYTYPE_SSH2) { - char msg[256]; - sprintf(msg, "Couldn't load this key (%s)", key_type_to_str(type)); - MessageBox(NULL, msg, APPNAME, MB_OK | MB_ICONERROR); + char *msg = dupprintf("Couldn't load this key (%s)", + key_type_to_str(type)); + message_box(msg, APPNAME, MB_OK | MB_ICONERROR, + HELPCTXID(errors_cantloadkey)); + sfree(msg); return; } @@ -430,7 +430,8 @@ static void add_keyfile(Filename filename) if (type == SSH_KEYTYPE_SSH1) { if (!rsakey_pubblob(&filename, &blob, &bloblen, &error)) { char *msg = dupprintf("Couldn't load private key (%s)", error); - MessageBox(NULL, msg, APPNAME, MB_OK | MB_ICONERROR); + message_box(msg, APPNAME, MB_OK | MB_ICONERROR, + HELPCTXID(errors_cantloadkey)); sfree(msg); return; } @@ -440,7 +441,8 @@ static void add_keyfile(Filename filename) blob = ssh2_userkey_loadpub(&filename, NULL, &bloblen, &error); if (!blob) { char *msg = dupprintf("Couldn't load private key (%s)", error); - MessageBox(NULL, msg, APPNAME, MB_OK | MB_ICONERROR); + message_box(msg, APPNAME, MB_OK | MB_ICONERROR, + HELPCTXID(errors_cantloadkey)); sfree(msg); return; } @@ -541,7 +543,7 @@ static void add_keyfile(Filename filename) } else { int dlgret; original_pass = 1; - dlgret = DialogBoxParam(instance, MAKEINTRESOURCE(210), + dlgret = DialogBoxParam(hinst, MAKEINTRESOURCE(210), NULL, PassphraseProc, (LPARAM) & pps); passphrase_box = NULL; if (!dlgret) { @@ -578,7 +580,8 @@ static void add_keyfile(Filename filename) sfree(comment); if (ret == 0) { char *msg = dupprintf("Couldn't load private key (%s)", error); - MessageBox(NULL, msg, APPNAME, MB_OK | MB_ICONERROR); + message_box(msg, APPNAME, MB_OK | MB_ICONERROR, + HELPCTXID(errors_cantloadkey)); sfree(msg); if (type == SSH_KEYTYPE_SSH1) sfree(rkey); @@ -1417,7 +1420,7 @@ static void prompt_add_keyfile(void) if (!keypath) keypath = filereq_new(); memset(&of, 0, sizeof(of)); - of.hwndOwner = main_hwnd; + of.hwndOwner = hwnd; of.lpstrFilter = FILTER_KEY_FILES; of.lpstrCustomFilter = NULL; of.nFilterIndex = 1; @@ -1581,7 +1584,7 @@ static int CALLBACK KeyListProc(HWND hwnd, UINT msg, if (HIWORD(wParam) == BN_CLICKED || HIWORD(wParam) == BN_DOUBLECLICKED) { if (help_path) { - WinHelp(main_hwnd, help_path, HELP_COMMAND, + WinHelp(hwnd, help_path, HELP_COMMAND, (DWORD)"JI(`',`pageant.general')"); requested_help = TRUE; } @@ -1600,7 +1603,7 @@ static int CALLBACK KeyListProc(HWND hwnd, UINT msg, } if (topic) { char *cmd = dupprintf("JI(`',`%s')", topic); - WinHelp(main_hwnd, help_path, HELP_COMMAND, (DWORD)cmd); + WinHelp(hwnd, help_path, HELP_COMMAND, (DWORD)cmd); sfree(cmd); requested_help = TRUE; } else { @@ -1633,7 +1636,7 @@ static BOOL AddTrayIcon(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)); + tnid.hIcon = hicon = LoadIcon(hinst, MAKEINTRESOURCE(201)); strcpy(tnid.szTip, "Pageant (PuTTY authentication agent)"); res = Shell_NotifyIcon(NIM_ADD, &tnid); @@ -1758,7 +1761,7 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, break; case IDM_VIEWKEYS: if (!keylist) { - keylist = CreateDialog(instance, MAKEINTRESOURCE(211), + keylist = CreateDialog(hinst, MAKEINTRESOURCE(211), NULL, KeyListProc); ShowWindow(keylist, SW_SHOWNORMAL); } @@ -1783,7 +1786,7 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, break; case IDM_ABOUT: if (!aboutbox) { - aboutbox = CreateDialog(instance, MAKEINTRESOURCE(213), + aboutbox = CreateDialog(hinst, MAKEINTRESOURCE(213), NULL, AboutProc); ShowWindow(aboutbox, SW_SHOWNORMAL); /* @@ -1797,7 +1800,7 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, break; case IDM_HELP: if (help_path) { - WinHelp(main_hwnd, help_path, HELP_COMMAND, + WinHelp(hwnd, help_path, HELP_COMMAND, (DWORD)"JI(`',`pageant.general')"); requested_help = TRUE; } @@ -1828,7 +1831,7 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, break; case WM_DESTROY: if (requested_help) { - WinHelp(main_hwnd, help_path, HELP_QUIT, 0); + WinHelp(hwnd, help_path, HELP_QUIT, 0); requested_help = FALSE; } PostQuitMessage(0); @@ -1970,6 +1973,9 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) int argc, i; char **argv, **argstart; + hinst = inst; + hwnd = NULL; + /* * Determine whether we're an NT system (should have security * APIs) or a non-NT system (don't do security). @@ -2008,8 +2014,6 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) } else advapi = NULL; - instance = inst; - /* * See if we can find our Help file. */ @@ -2074,15 +2078,15 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) RegisterClass(&wndclass); } - main_hwnd = keylist = NULL; + keylist = NULL; - main_hwnd = CreateWindow(APPNAME, APPNAME, - WS_OVERLAPPEDWINDOW | WS_VSCROLL, - CW_USEDEFAULT, CW_USEDEFAULT, - 100, 100, NULL, NULL, inst, NULL); + hwnd = CreateWindow(APPNAME, APPNAME, + WS_OVERLAPPEDWINDOW | WS_VSCROLL, + CW_USEDEFAULT, CW_USEDEFAULT, + 100, 100, NULL, NULL, inst, NULL); /* Set up a system tray icon */ - AddTrayIcon(main_hwnd); + AddTrayIcon(hwnd); /* Accelerators used: nsvkxa */ systray_menu = CreatePopupMenu(); @@ -2107,7 +2111,7 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) /* Set the default menu item. */ SetMenuDefaultItem(systray_menu, IDM_VIEWKEYS, FALSE); - ShowWindow(main_hwnd, SW_HIDE); + ShowWindow(hwnd, SW_HIDE); /* * Initialise storage for RSA keys. @@ -2194,7 +2198,7 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) NOTIFYICONDATA tnid; tnid.cbSize = sizeof(NOTIFYICONDATA); - tnid.hWnd = main_hwnd; + tnid.hWnd = hwnd; tnid.uID = 1; Shell_NotifyIcon(NIM_DELETE, &tnid); diff --git a/windows/winutils.c b/windows/winutils.c index 5bead7b2..450c030e 100644 --- a/windows/winutils.c +++ b/windows/winutils.c @@ -104,6 +104,8 @@ static VOID CALLBACK message_box_help_callback(LPHELPINFO lpHelpInfo) } while (0) CHECK_CTX(errors_hostkey_absent); CHECK_CTX(errors_hostkey_changed); + CHECK_CTX(errors_cantloadkey); + CHECK_CTX(option_cleanup); #undef CHECK_CTX if (context) { /* We avoid using malloc, in case we're in a situation where @@ -125,8 +127,7 @@ int message_box(LPCTSTR text, LPCTSTR caption, DWORD style, DWORD helpctxid) * callback function for the Help button. */ mbox.cbSize = sizeof(mbox); - /* FIXME: assumes global hwnd and hinst are always the Right Thing; - * are they? */ + /* Assumes the globals `hinst' and `hwnd' have sensible values. */ mbox.hInstance = hinst; mbox.hwndOwner = hwnd; mbox.lpfnMsgBoxCallback = &message_box_help_callback;