1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-02-03 21:52:24 +00:00

Jacob's patch to make pressing Return on a selected saved session

load it and go, and simultaneously allow Alt-L on a selected saved
session not to change the focus.

[originally from svn r1118]
This commit is contained in:
Simon Tatham 2001-05-13 11:58:36 +00:00
parent e59d3712c2
commit b14d3260d8

106
windlg.c
View File

@ -16,6 +16,7 @@ static char **events = NULL;
static int nevents = 0, negsize = 0; static int nevents = 0, negsize = 0;
static int readytogo; static int readytogo;
static int sesslist_has_focus;
void force_normal(HWND hwnd) void force_normal(HWND hwnd)
{ {
@ -538,14 +539,16 @@ static void fmtfont(char *buf)
(cfg.fontheight < 0 ? -cfg.fontheight : cfg.fontheight)); (cfg.fontheight < 0 ? -cfg.fontheight : cfg.fontheight));
} }
static void init_dlg_ctrls(HWND hwnd) /* 2nd arg: NZ => don't redraw session list (use when loading
* a new session) */
static void init_dlg_ctrls(HWND hwnd, int keepsess)
{ {
int i; int i;
char fontstatic[256]; char fontstatic[256];
SetDlgItemText(hwnd, IDC_HOST, cfg.host); SetDlgItemText(hwnd, IDC_HOST, cfg.host);
SetDlgItemText(hwnd, IDC_SESSEDIT, savedsession); SetDlgItemText(hwnd, IDC_SESSEDIT, savedsession);
{ if (!keepsess) {
int i, n; int i, n;
n = SendDlgItemMessage(hwnd, IDC_SESSLIST, LB_GETCOUNT, 0, 0); n = SendDlgItemMessage(hwnd, IDC_SESSLIST, LB_GETCOUNT, 0, 0);
for (i = n; i-- > 0;) for (i = n; i-- > 0;)
@ -1193,6 +1196,33 @@ static void create_controls(HWND hwnd, int dlgtype, int panel)
} }
} }
/*
* Helper function to load the session selected in SESSLIST
* if any, as this is done in more than one place in
* GenericMainDlgProc(). 0 => failure.
*/
static int load_selected_session(HWND hwnd)
{
int n = SendDlgItemMessage(hwnd, IDC_SESSLIST,
LB_GETCURSEL, 0, 0);
int isdef;
if (n == LB_ERR) {
MessageBeep(0);
return 0;
}
isdef = !strcmp(sessions[n], "Default Settings");
load_settings(sessions[n], !isdef, &cfg);
init_dlg_ctrls(hwnd, TRUE);
if (!isdef)
SetDlgItemText(hwnd, IDC_SESSEDIT, sessions[n]);
else
SetDlgItemText(hwnd, IDC_SESSEDIT, "");
/* Restore the selection, which will have been clobbered by
* SESSEDIT handling. */
SendDlgItemMessage(hwnd, IDC_SESSLIST, LB_SETCURSEL, n, 0);
return 1;
}
/* /*
* This function is the configuration box. * This function is the configuration box.
*/ */
@ -1373,7 +1403,7 @@ static int GenericMainDlgProc(HWND hwnd, UINT msg,
if (!strcmp(buffer, "Translation")) if (!strcmp(buffer, "Translation"))
create_controls(hwnd, dlgtype, translationpanelstart); create_controls(hwnd, dlgtype, translationpanelstart);
init_dlg_ctrls(hwnd); init_dlg_ctrls(hwnd, FALSE);
SetFocus(((LPNMHDR) lParam)->hwndFrom); /* ensure focus stays */ SetFocus(((LPNMHDR) lParam)->hwndFrom); /* ensure focus stays */
return 0; return 0;
@ -1386,6 +1416,16 @@ static int GenericMainDlgProc(HWND hwnd, UINT msg,
if (GetWindowLong(hwnd, GWL_USERDATA) == 1) if (GetWindowLong(hwnd, GWL_USERDATA) == 1)
switch (LOWORD(wParam)) { switch (LOWORD(wParam)) {
case IDOK: case IDOK:
/* Behaviour of the "Open" button is different if the
* session list has focus, *unless* the user just
* double-clicked... */
if (sesslist_has_focus && !readytogo) {
if (!load_selected_session(hwnd)) {
MessageBeep(0);
return 0;
}
}
/* If at this point we have a valid session, go! */
if (*cfg.host) if (*cfg.host)
EndDialog(hwnd, 1); EndDialog(hwnd, 1);
else else
@ -1465,6 +1505,8 @@ static int GenericMainDlgProc(HWND hwnd, UINT msg,
&cfg); &cfg);
get_sesslist(FALSE); get_sesslist(FALSE);
get_sesslist(TRUE); get_sesslist(TRUE);
SendDlgItemMessage(hwnd, IDC_SESSLIST, WM_SETREDRAW,
FALSE, 0);
SendDlgItemMessage(hwnd, IDC_SESSLIST, LB_RESETCONTENT, SendDlgItemMessage(hwnd, IDC_SESSLIST, LB_RESETCONTENT,
0, 0); 0, 0);
for (i = 0; i < nsessions; i++) for (i = 0; i < nsessions; i++)
@ -1473,32 +1515,28 @@ static int GenericMainDlgProc(HWND hwnd, UINT msg,
(LPARAM) (sessions[i])); (LPARAM) (sessions[i]));
SendDlgItemMessage(hwnd, IDC_SESSLIST, LB_SETCURSEL, SendDlgItemMessage(hwnd, IDC_SESSLIST, LB_SETCURSEL,
(WPARAM) - 1, 0); (WPARAM) - 1, 0);
SendDlgItemMessage(hwnd, IDC_SESSLIST, WM_SETREDRAW,
TRUE, 0);
InvalidateRect(GetDlgItem(hwnd, IDC_SESSLIST), NULL,
TRUE);
} }
break; break;
case IDC_SESSLIST: case IDC_SESSLIST:
case IDC_SESSLOAD: case IDC_SESSLOAD:
if (LOWORD(wParam) == IDC_SESSLIST) {
if (HIWORD(wParam) == LBN_SETFOCUS)
sesslist_has_focus = 1;
else if (HIWORD(wParam) == LBN_KILLFOCUS)
sesslist_has_focus = 0;
}
if (LOWORD(wParam) == IDC_SESSLOAD && if (LOWORD(wParam) == IDC_SESSLOAD &&
HIWORD(wParam) != BN_CLICKED && HIWORD(wParam) != BN_CLICKED &&
HIWORD(wParam) != BN_DOUBLECLICKED) break; HIWORD(wParam) != BN_DOUBLECLICKED) break;
if (LOWORD(wParam) == IDC_SESSLIST && if (LOWORD(wParam) == IDC_SESSLIST &&
HIWORD(wParam) != LBN_DBLCLK) break; HIWORD(wParam) != LBN_DBLCLK) break;
{ /* Load the session selected in SESSLIST. */
int n = SendDlgItemMessage(hwnd, IDC_SESSLIST, if (load_selected_session(hwnd) &&
LB_GETCURSEL, 0, 0); LOWORD(wParam) == IDC_SESSLIST) {
int isdef;
if (n == LB_ERR) {
MessageBeep(0);
break;
}
isdef = !strcmp(sessions[n], "Default Settings");
load_settings(sessions[n], !isdef, &cfg);
init_dlg_ctrls(hwnd);
if (!isdef)
SetDlgItemText(hwnd, IDC_SESSEDIT, sessions[n]);
else
SetDlgItemText(hwnd, IDC_SESSEDIT, "");
}
if (LOWORD(wParam) == IDC_SESSLIST) {
/* /*
* A double-click on a saved session should * A double-click on a saved session should
* actually start the session, not just load it. * actually start the session, not just load it.
@ -1523,6 +1561,8 @@ static int GenericMainDlgProc(HWND hwnd, UINT msg,
del_settings(sessions[n]); del_settings(sessions[n]);
get_sesslist(FALSE); get_sesslist(FALSE);
get_sesslist(TRUE); get_sesslist(TRUE);
SendDlgItemMessage(hwnd, IDC_SESSLIST, WM_SETREDRAW,
FALSE, 0);
SendDlgItemMessage(hwnd, IDC_SESSLIST, LB_RESETCONTENT, SendDlgItemMessage(hwnd, IDC_SESSLIST, LB_RESETCONTENT,
0, 0); 0, 0);
for (i = 0; i < nsessions; i++) for (i = 0; i < nsessions; i++)
@ -1531,6 +1571,10 @@ static int GenericMainDlgProc(HWND hwnd, UINT msg,
(LPARAM) (sessions[i])); (LPARAM) (sessions[i]));
SendDlgItemMessage(hwnd, IDC_SESSLIST, LB_SETCURSEL, SendDlgItemMessage(hwnd, IDC_SESSLIST, LB_SETCURSEL,
(WPARAM) - 1, 0); (WPARAM) - 1, 0);
SendDlgItemMessage(hwnd, IDC_SESSLIST, WM_SETREDRAW,
TRUE, 0);
InvalidateRect(GetDlgItem(hwnd, IDC_SESSLIST), NULL,
TRUE);
} }
case IDC_PINGEDIT: case IDC_PINGEDIT:
if (HIWORD(wParam) == EN_CHANGE) if (HIWORD(wParam) == EN_CHANGE)
@ -2203,6 +2247,8 @@ static int GenericMainDlgProc(HWND hwnd, UINT msg,
int n, i; int n, i;
cfg.bold_colour = cfg.bold_colour =
IsDlgButtonChecked(hwnd, IDC_BOLDCOLOUR); IsDlgButtonChecked(hwnd, IDC_BOLDCOLOUR);
SendDlgItemMessage(hwnd, IDC_COLOURLIST, WM_SETREDRAW,
FALSE, 0);
n = n =
SendDlgItemMessage(hwnd, IDC_COLOURLIST, SendDlgItemMessage(hwnd, IDC_COLOURLIST,
LB_GETCOUNT, 0, 0); LB_GETCOUNT, 0, 0);
@ -2216,6 +2262,10 @@ static int GenericMainDlgProc(HWND hwnd, UINT msg,
LB_ADDSTRING, 0, LB_ADDSTRING, 0,
(LPARAM) colours[i]); (LPARAM) colours[i]);
} }
SendDlgItemMessage(hwnd, IDC_COLOURLIST, WM_SETREDRAW,
TRUE, 0);
InvalidateRect(GetDlgItem(hwnd, IDC_COLOURLIST), NULL,
TRUE);
} }
break; break;
case IDC_PALETTE: case IDC_PALETTE:
@ -2227,9 +2277,10 @@ static int GenericMainDlgProc(HWND hwnd, UINT msg,
case IDC_COLOURLIST: case IDC_COLOURLIST:
if (HIWORD(wParam) == LBN_DBLCLK || if (HIWORD(wParam) == LBN_DBLCLK ||
HIWORD(wParam) == LBN_SELCHANGE) { HIWORD(wParam) == LBN_SELCHANGE) {
int i = SendDlgItemMessage(hwnd, IDC_COLOURLIST, int i =
LB_GETCURSEL, SendDlgItemMessage(hwnd, IDC_COLOURLIST,
0, 0); LB_GETCURSEL,
0, 0);
if (!cfg.bold_colour) if (!cfg.bold_colour)
i = (i < 3 ? i * 2 : i == 3 ? 5 : i * 2 - 2); i = (i < 3 ? i * 2 : i == 3 ? 5 : i * 2 - 2);
SetDlgItemInt(hwnd, IDC_RVALUE, cfg.colours[i][0], SetDlgItemInt(hwnd, IDC_RVALUE, cfg.colours[i][0],
@ -2245,9 +2296,10 @@ static int GenericMainDlgProc(HWND hwnd, UINT msg,
HIWORD(wParam) == BN_DOUBLECLICKED) { HIWORD(wParam) == BN_DOUBLECLICKED) {
static CHOOSECOLOR cc; static CHOOSECOLOR cc;
static DWORD custom[16] = { 0 }; /* zero initialisers */ static DWORD custom[16] = { 0 }; /* zero initialisers */
int i = SendDlgItemMessage(hwnd, IDC_COLOURLIST, int i =
LB_GETCURSEL, SendDlgItemMessage(hwnd, IDC_COLOURLIST,
0, 0); LB_GETCURSEL,
0, 0);
if (!cfg.bold_colour) if (!cfg.bold_colour)
i = (i < 3 ? i * 2 : i == 3 ? 5 : i * 2 - 2); i = (i < 3 ? i * 2 : i == 3 ? 5 : i * 2 - 2);
cc.lStructSize = sizeof(cc); cc.lStructSize = sizeof(cc);
@ -2483,7 +2535,7 @@ void verify_ssh_host_key(char *host, int port, char *keytype,
char message[160 + char message[160 +
/* sensible fingerprint max size */ /* sensible fingerprint max size */
(sizeof(absentmsg) > sizeof(wrongmsg) ? (sizeof(absentmsg) > sizeof(wrongmsg) ?
sizeof(absentmsg) : sizeof(wrongmsg))]; sizeof(absentmsg) : sizeof(wrongmsg))];