X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/putty/blobdiff_plain/566bba7799c57ae9709040536d585000fe4af0cf..41d3adbbfed77605e4a397ce199c5751c35bf94b:/windlg.c?ds=sidebyside diff --git a/windlg.c b/windlg.c index 6c4d26c3..7ee5c97a 100644 --- a/windlg.c +++ b/windlg.c @@ -2038,10 +2038,22 @@ static int GenericMainDlgProc(HWND hwnd, UINT msg, cfg.protocol = i ? PROT_SSH : j ? PROT_TELNET : k ? PROT_RLOGIN : PROT_RAW; - if ((cfg.protocol == PROT_SSH && cfg.port != 22) - || (cfg.protocol == PROT_TELNET && cfg.port != 23) - || (cfg.protocol == PROT_RLOGIN - && cfg.port != 513)) { + /* + * When switching using the arrow keys, we + * appear to get two of these messages, both + * mentioning the target button in + * LOWORD(wParam), but one of them called while + * the previous button is still checked. This + * causes an unnecessary reset of the port + * number field, which we fix by ensuring here + * that the button selected is indeed the one + * checked. + */ + if (IsDlgButtonChecked(hwnd, LOWORD(wParam)) && + ((cfg.protocol == PROT_SSH && cfg.port != 22) + || (cfg.protocol == PROT_TELNET && cfg.port != 23) + || (cfg.protocol == PROT_RLOGIN + && cfg.port != 513))) { cfg.port = i ? 22 : j ? 23 : 513; SetDlgItemInt(hwnd, IDC_PORT, cfg.port, FALSE); }