From 7fbbad0ce1216e66fccab818c0349e2413a3898c Mon Sep 17 00:00:00 2001 From: Simon Tatham Date: Wed, 20 Feb 2002 22:28:11 +0000 Subject: [PATCH] Work around surreal use of WM_COMMAND in radio button sets. Prevents port number field resetting unnecessarily when protocol is set to Raw using the arrow keys. [originally from svn r1558] --- windlg.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) 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); }