Add context help to a couple of message boxes. Unfortunately the ones
authorjacob <jacob@cda61777-01e9-0310-a592-d414129be87e>
Tue, 1 Mar 2005 01:16:57 +0000 (01:16 +0000)
committerjacob <jacob@cda61777-01e9-0310-a592-d414129be87e>
Tue, 1 Mar 2005 01:16:57 +0000 (01:16 +0000)
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

doc/errors.but
doc/using.but
windows/window.c
windows/winhelp.h
windows/winpgen.c
windows/winpgnt.c
windows/winutils.c

index 771c7ec..2c4385e 100644 (file)
@@ -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
index 81dc552..46d5f16 100644 (file)
@@ -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
index b3d350b..2105888 100644 (file)
@@ -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();
index 34cfd93..51e1b9c 100644 (file)
@@ -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. */
 #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
index eac66de..d027fc7 100644 (file)
@@ -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.
index e37043e..e128949 100644 (file)
@@ -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);
index 5bead7b..450c030 100644 (file)
@@ -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;