X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/putty/blobdiff_plain/8ba2df8bf3d101e4f7c7e4dd3cd6fa249dd80a52..cf6e59d623fbfd4efad0d63795ae5e7f33d5aa5b:/windlg.c diff --git a/windlg.c b/windlg.c index 8ada1f48..57f49436 100644 --- a/windlg.c +++ b/windlg.c @@ -173,6 +173,14 @@ static int CALLBACK AboutProc (HWND hwnd, UINT msg, return 0; } +/* + * Null dialog procedure. + */ +static int CALLBACK NullDlgProc (HWND hwnd, UINT msg, + WPARAM wParam, LPARAM lParam) { + return 0; +} + /* ---------------------------------------------------------------------- * Routines to self-manage the controls in a dialog box. */ @@ -945,6 +953,7 @@ enum { IDCX_ABOUT = IDC_ABOUT, IDCX_TVSTATIC, IDCX_TREEVIEW, controlstartvalue, IDC_CIPHER3DES, IDC_CIPHERBLOWF, IDC_CIPHERDES, + IDC_BUGGYMAC, IDC_AUTHTIS, IDC_PKSTATIC, IDC_PKEDIT, @@ -1047,9 +1056,6 @@ static void init_dlg_ctrls(HWND hwnd) { SetDlgItemText (hwnd, IDC_HOST, cfg.host); SetDlgItemText (hwnd, IDC_SESSEDIT, savedsession); SetDlgItemInt (hwnd, IDC_PORT, cfg.port, FALSE); - for (i = 0; i < nsessions; i++) - SendDlgItemMessage (hwnd, IDC_SESSLIST, LB_ADDSTRING, - 0, (LPARAM) (sessions[i])); CheckRadioButton (hwnd, IDC_PROTRAW, IDC_PROTSSH, cfg.protocol==PROT_SSH ? IDC_PROTSSH : cfg.protocol==PROT_TELNET ? IDC_PROTTELNET : IDC_PROTRAW ); @@ -1059,7 +1065,7 @@ static void init_dlg_ctrls(HWND hwnd) { cfg.bksp_is_delete ? IDC_DEL127 : IDC_DEL008); CheckRadioButton (hwnd, IDC_HOMETILDE, IDC_HOMERXVT, cfg.rxvt_homeend ? IDC_HOMERXVT : IDC_HOMETILDE); - CheckRadioButton (hwnd, IDC_FUNCTILDE, IDC_FUNCXTERM, + CheckRadioButton (hwnd, IDC_FUNCTILDE, IDC_FUNCVT400, cfg.funky_type == 0 ? IDC_FUNCTILDE : cfg.funky_type == 1 ? IDC_FUNCLINUX : cfg.funky_type == 2 ? IDC_FUNCXTERM : @@ -1112,6 +1118,7 @@ static void init_dlg_ctrls(HWND hwnd) { SetDlgItemText (hwnd, IDC_TTEDIT, cfg.termtype); SetDlgItemText (hwnd, IDC_LOGEDIT, cfg.username); CheckDlgButton (hwnd, IDC_NOPTY, cfg.nopty); + CheckDlgButton (hwnd, IDC_BUGGYMAC, cfg.buggymac); CheckDlgButton (hwnd, IDC_AGENTFWD, cfg.agentfwd); CheckRadioButton (hwnd, IDC_CIPHER3DES, IDC_CIPHERDES, cfg.cipher == CIPHER_BLOWFISH ? IDC_CIPHERBLOWF : @@ -1549,7 +1556,7 @@ static int GenericMainDlgProc (HWND hwnd, UINT msg, } /* The SSH panel. Accelerators used: [acgo] rmakwp123bd */ - { + if (backends[2].backend != NULL) { struct ctlpos cp; ctlposinit(&cp, hwnd, 80, 3, 13); if (dlgtype == 0) { @@ -1578,6 +1585,8 @@ static int GenericMainDlgProc (HWND hwnd, UINT msg, "&3DES", IDC_CIPHER3DES, "&Blowfish", IDC_CIPHERBLOWF, "&DES", IDC_CIPHERDES, NULL); + checkbox(&cp, "Imitate SSH 2 MAC bug in commercial <= v2.3.x", + IDC_BUGGYMAC); endbox(&cp); treeview_insert(&tvfaff, 1, "SSH"); @@ -1585,6 +1594,9 @@ static int GenericMainDlgProc (HWND hwnd, UINT msg, } init_dlg_ctrls(hwnd); + for (i = 0; i < nsessions; i++) + SendDlgItemMessage (hwnd, IDC_SESSLIST, LB_ADDSTRING, + 0, (LPARAM) (sessions[i])); /* * Hide all the controls to start with. @@ -1743,14 +1755,16 @@ static int GenericMainDlgProc (HWND hwnd, UINT msg, { int n = SendDlgItemMessage (hwnd, IDC_SESSLIST, LB_GETCURSEL, 0, 0); + int isdef; if (n == LB_ERR) { MessageBeep(0); break; } - load_settings (sessions[n], - !!strcmp(sessions[n], "Default Settings"), - &cfg); + isdef = !strcmp(sessions[n], "Default Settings"); + load_settings (sessions[n], !isdef, &cfg); init_dlg_ctrls(hwnd); + if (!isdef) + SetDlgItemText(hwnd, IDC_SESSEDIT, sessions[n]); } if (LOWORD(wParam) == IDC_SESSLIST) { /* @@ -2057,6 +2071,11 @@ static int GenericMainDlgProc (HWND hwnd, UINT msg, HIWORD(wParam) == BN_DOUBLECLICKED) cfg.nopty = IsDlgButtonChecked (hwnd, IDC_NOPTY); break; + case IDC_BUGGYMAC: + if (HIWORD(wParam) == BN_CLICKED || + HIWORD(wParam) == BN_DOUBLECLICKED) + cfg.buggymac = IsDlgButtonChecked (hwnd, IDC_BUGGYMAC); + break; case IDC_AGENTFWD: if (HIWORD(wParam) == BN_CLICKED || HIWORD(wParam) == BN_DOUBLECLICKED) @@ -2286,6 +2305,21 @@ static int CALLBACK ReconfDlgProc (HWND hwnd, UINT msg, return GenericMainDlgProc (hwnd, msg, wParam, lParam, 1); } +int defuse_showwindow(void) { + /* + * Work around the fact that the app's first call to ShowWindow + * will ignore the default in favour of the shell-provided + * setting. + */ + { + HWND hwnd; + hwnd = CreateDialog (hinst, MAKEINTRESOURCE(IDD_ABOUTBOX), + NULL, NullDlgProc); + ShowWindow(hwnd, SW_HIDE); + DestroyWindow(hwnd); + } +} + int do_config (void) { int ret;