Prevent recursive weirdnesses happening when the user selects a
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Sat, 4 Aug 2001 14:59:56 +0000 (14:59 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Sat, 4 Aug 2001 14:59:56 +0000 (14:59 +0000)
system-tray menu option while a passphrase prompt is active.

git-svn-id: svn://svn.tartarus.org/sgt/putty@1170 cda61777-01e9-0310-a592-d414129be87e

pageant.c

index 853341a..fc5e879 100644 (file)
--- a/pageant.c
+++ b/pageant.c
@@ -168,6 +168,8 @@ static int CALLBACK AboutProc(HWND hwnd, UINT msg,
     return 0;
 }
 
+static HWND passphrase_box;
+
 /*
  * Dialog-box function for the passphrase box.
  */
@@ -179,6 +181,7 @@ static int CALLBACK PassphraseProc(HWND hwnd, UINT msg,
 
     switch (msg) {
       case WM_INITDIALOG:
+       passphrase_box = hwnd;
        /*
         * Centre the window.
         */
@@ -324,6 +327,7 @@ static void add_keyfile(char *filename)
            int dlgret;
            dlgret = DialogBoxParam(instance, MAKEINTRESOURCE(210),
                                    NULL, PassphraseProc, (LPARAM) & pps);
+           passphrase_box = NULL;
            if (!dlgret) {
                if (comment)
                    sfree(comment);
@@ -1017,6 +1021,11 @@ static int CALLBACK KeyListProc(HWND hwnd, UINT msg,
          case 101:                    /* add key */
            if (HIWORD(wParam) == BN_CLICKED ||
                HIWORD(wParam) == BN_DOUBLECLICKED) {
+               if (passphrase_box) {
+                   MessageBeep(MB_ICONERROR);
+                   SetForegroundWindow(passphrase_box);
+                   break;
+               }
                prompt_add_keyfile();
            }
            return 0;
@@ -1091,6 +1100,8 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
       case WM_SYSCOMMAND:
        switch (wParam & ~0xF) {       /* low 4 bits reserved to Windows */
          case IDM_CLOSE:
+           if (passphrase_box)
+               SendMessage(passphrase_box, WM_CLOSE, 0, 0);
            SendMessage(hwnd, WM_CLOSE, 0, 0);
            break;
          case IDM_VIEWKEYS:
@@ -1108,6 +1119,11 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
            }
            break;
          case IDM_ADDKEY:
+           if (passphrase_box) {
+               MessageBeep(MB_ICONERROR);
+               SetForegroundWindow(passphrase_box);
+               break;
+           }
            prompt_add_keyfile();
            break;
          case IDM_ABOUT: