X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/37508af4ab231b1fde58345f5237f3ee82803829..4644b0ce3adad5efe574dc125bc3b0cd8f6c2aa7:/windlg.c diff --git a/windlg.c b/windlg.c index b5d1b57f..757300dc 100644 --- a/windlg.c +++ b/windlg.c @@ -95,17 +95,13 @@ static void gppi(HKEY key, LPCTSTR name, int def, int *i) { *i = val; } -typedef struct { - void *posn; - void *temp; - char dataspace[2048]; -} DTemplate; - static HINSTANCE hinst; static char **sessions; static int nsessions; +static int readytogo; + static void save_settings (char *section, int do_host) { int i; HKEY subkey1, sesskey; @@ -116,7 +112,6 @@ static void save_settings (char *section, int do_host) { if (RegCreateKey(HKEY_CURRENT_USER, puttystr, &subkey1)!=ERROR_SUCCESS || RegCreateKey(subkey1, p, &sesskey) != ERROR_SUCCESS) { - free(p); sesskey = NULL; } @@ -153,6 +148,7 @@ static void save_settings (char *section, int do_host) { wpps (sesskey, "Environment", buf); } wpps (sesskey, "UserName", cfg.username); + wppi (sesskey, "NoPTY", cfg.nopty); wppi (sesskey, "RFCEnviron", cfg.rfc_environ); wppi (sesskey, "BackspaceIsDelete", cfg.bksp_is_delete); wppi (sesskey, "RXVTHomeEnd", cfg.rxvt_homeend); @@ -162,6 +158,7 @@ static void save_settings (char *section, int do_host) { wppi (sesskey, "ScrollbackLines", cfg.savelines); wppi (sesskey, "DECOriginMode", cfg.dec_om); wppi (sesskey, "AutoWrapMode", cfg.wrap_mode); + wppi (sesskey, "LFImpliesCR", cfg.lfhascr); wppi (sesskey, "WinNameAlways", cfg.win_name_always); wppi (sesskey, "TermWidth", cfg.width); wppi (sesskey, "TermHeight", cfg.height); @@ -216,15 +213,17 @@ static void load_settings (char *section, int do_host) { p = malloc(3*strlen(section)+1); mungestr(section, p); - - if (RegOpenKey(HKEY_CURRENT_USER, puttystr, &subkey1) != ERROR_SUCCESS || - RegOpenKey(subkey1, p, &sesskey) != ERROR_SUCCESS) { - free(p); + + if (RegOpenKey(HKEY_CURRENT_USER, puttystr, &subkey1) != ERROR_SUCCESS) { sesskey = NULL; + } else { + if (RegOpenKey(subkey1, p, &sesskey) != ERROR_SUCCESS) { + sesskey = NULL; + } + RegCloseKey(subkey1); } free(p); - RegCloseKey(subkey1); if (do_host) { char prot[10]; @@ -264,6 +263,7 @@ static void load_settings (char *section, int do_host) { *q = '\0'; } gpps (sesskey, "UserName", "", cfg.username, sizeof(cfg.username)); + gppi (sesskey, "NoPTY", 0, &cfg.nopty); gppi (sesskey, "RFCEnviron", 0, &cfg.rfc_environ); gppi (sesskey, "BackspaceIsDelete", 1, &cfg.bksp_is_delete); gppi (sesskey, "RXVTHomeEnd", 0, &cfg.rxvt_homeend); @@ -273,6 +273,7 @@ static void load_settings (char *section, int do_host) { gppi (sesskey, "ScrollbackLines", 200, &cfg.savelines); gppi (sesskey, "DECOriginMode", 0, &cfg.dec_om); gppi (sesskey, "AutoWrapMode", 1, &cfg.wrap_mode); + gppi (sesskey, "LFImpliesCR", 0, &cfg.lfhascr); gppi (sesskey, "WinNameAlways", 0, &cfg.win_name_always); gppi (sesskey, "TermWidth", 80, &cfg.width); gppi (sesskey, "TermHeight", 24, &cfg.height); @@ -359,10 +360,32 @@ static int CALLBACK LogProc (HWND hwnd, UINT msg, return 0; } +static int CALLBACK LicenceProc (HWND hwnd, UINT msg, + WPARAM wParam, LPARAM lParam) { + switch (msg) { + case WM_INITDIALOG: + return 1; + case WM_COMMAND: + switch (LOWORD(wParam)) { + case IDOK: + abtbox = NULL; + DestroyWindow (hwnd); + return 0; + } + return 0; + case WM_CLOSE: + abtbox = NULL; + DestroyWindow (hwnd); + return 0; + } + return 0; +} + static int CALLBACK AboutProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_INITDIALOG: + SetDlgItemText (hwnd, IDA_VERSION, ver); return 1; /* case WM_CTLCOLORDLG: */ /* return (int) GetStockObject (LTGRAY_BRUSH); */ @@ -378,7 +401,7 @@ static int CALLBACK AboutProc (HWND hwnd, UINT msg, case IDA_LICENCE: EnableWindow(hwnd, 0); DialogBox (hinst, MAKEINTRESOURCE(IDD_LICENCEBOX), - NULL, AboutProc); + NULL, LicenceProc); EnableWindow(hwnd, 1); return 0; } @@ -425,6 +448,15 @@ static int CALLBACK ConnectionProc (HWND hwnd, UINT msg, cfg.protocol==PROT_SSH ? IDC0_PROTSSH : IDC0_PROTTELNET); CheckDlgButton (hwnd, IDC0_CLOSEEXIT, cfg.close_on_exit); break; + case WM_LBUTTONUP: + /* + * Button release should trigger WM_OK if there was a + * previous double click on the session list. + */ + ReleaseCapture(); + if (readytogo) + SendMessage (GetParent(hwnd), WM_COMMAND, IDOK, 0); + break; case WM_COMMAND: switch (LOWORD(wParam)) { case IDC0_PROTTELNET: @@ -522,8 +554,10 @@ static int CALLBACK ConnectionProc (HWND hwnd, UINT msg, * Unless it's Default Settings or some other * host-less set of saved settings. */ - if (*cfg.host) - SendMessage (GetParent(hwnd), WM_COMMAND, IDOK, 0); + if (*cfg.host) { + readytogo = TRUE; + SetCapture(hwnd); + } } break; case IDC0_SESSDEL: @@ -618,6 +652,7 @@ static int CALLBACK TerminalProc (HWND hwnd, UINT msg, CheckDlgButton (hwnd, IDC2_WRAPMODE, cfg.wrap_mode); CheckDlgButton (hwnd, IDC2_WINNAME, cfg.win_name_always); CheckDlgButton (hwnd, IDC2_DECOM, cfg.dec_om); + CheckDlgButton (hwnd, IDC2_LFHASCR, cfg.lfhascr); SetDlgItemInt (hwnd, IDC2_ROWSEDIT, cfg.height, FALSE); SetDlgItemInt (hwnd, IDC2_COLSEDIT, cfg.width, FALSE); SetDlgItemInt (hwnd, IDC2_SAVEEDIT, cfg.savelines, FALSE); @@ -646,6 +681,11 @@ static int CALLBACK TerminalProc (HWND hwnd, UINT msg, HIWORD(wParam) == BN_DOUBLECLICKED) cfg.dec_om = IsDlgButtonChecked (hwnd, IDC2_DECOM); break; + case IDC2_LFHASCR: + if (HIWORD(wParam) == BN_CLICKED || + HIWORD(wParam) == BN_DOUBLECLICKED) + cfg.lfhascr = IsDlgButtonChecked (hwnd, IDC2_LFHASCR); + break; case IDC2_ROWSEDIT: if (HIWORD(wParam) == EN_CHANGE) MyGetDlgItemInt (hwnd, IDC2_ROWSEDIT, &cfg.height); @@ -824,6 +864,7 @@ static int CALLBACK SshProc (HWND hwnd, UINT msg, case WM_INITDIALOG: SetDlgItemText (hwnd, IDC3_TTEDIT, cfg.termtype); SetDlgItemText (hwnd, IDC3_LOGEDIT, cfg.username); + CheckDlgButton (hwnd, IDC3_NOPTY, cfg.nopty); break; case WM_COMMAND: switch (LOWORD(wParam)) { @@ -837,6 +878,11 @@ static int CALLBACK SshProc (HWND hwnd, UINT msg, GetDlgItemText (hwnd, IDC3_LOGEDIT, cfg.username, sizeof(cfg.username)-1); break; + case IDC3_NOPTY: + if (HIWORD(wParam) == BN_CLICKED || + HIWORD(wParam) == BN_DOUBLECLICKED) + cfg.nopty = IsDlgButtonChecked (hwnd, IDC3_NOPTY); + break; } break; } @@ -1016,7 +1062,6 @@ static int CALLBACK ColourProc (HWND hwnd, UINT msg, return GeneralPanelProc (hwnd, msg, wParam, lParam); } -static DTemplate negot, main, reconf, panels[NPANELS]; static DLGPROC panelproc[NPANELS] = { ConnectionProc, KeyboardProc, TerminalProc, TelnetProc, SshProc, SelectionProc, ColourProc