X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/475eebf93799a91094532644799a2cdde46a14cf..0d694692c59504838ec2043ddfe670b3a9247faf:/window.c diff --git a/window.c b/window.c index cd4d5391..cdc58dc3 100644 --- a/window.c +++ b/window.c @@ -101,13 +101,10 @@ static Mouse_Button lastbtn; static char *window_name, *icon_name; -static Ldisc *real_ldisc; - static int compose_state = 0; -void begin_session(void) { - ldisc = real_ldisc; -} +/* Dummy routine, only required in plink. */ +void ldisc_update(int echo, int edit) {} int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) { static char appname[] = "PuTTY"; @@ -318,11 +315,6 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) { return 1; } - real_ldisc = (cfg.ldisc_term ? &ldisc_term : &ldisc_simple); - /* To start with, we use the simple line discipline, so we can - * type passwords etc without fear of them being echoed... */ - ldisc = &ldisc_simple; - if (!prev) { wndclass.style = 0; wndclass.lpfnWndProc = WndProc; @@ -675,7 +667,7 @@ void connection_fatal(char *fmt, ...) { vsprintf(stuff, fmt, ap); va_end(ap); MessageBox(hwnd, stuff, "PuTTY Fatal Error", MB_ICONERROR | MB_OK); - if (cfg.close_on_exit) + if (cfg.close_on_exit == COE_ALWAYS) PostQuitMessage(1); else { session_closed = TRUE; @@ -700,14 +692,17 @@ static void enact_pending_netevent(void) { ret = select_result (pend_netevent_wParam, pend_netevent_lParam); reentering = 0; - if (ret == 0) { - if (cfg.close_on_exit) + if (ret == 0 && !session_closed) { + /* Abnormal exits will already have set session_closed and taken + * appropriate action. */ + if (cfg.close_on_exit == COE_ALWAYS || + cfg.close_on_exit == COE_NORMAL) PostQuitMessage(0); else { - session_closed = TRUE; - MessageBox(hwnd, "Connection closed by remote host", - "PuTTY", MB_OK | MB_ICONINFORMATION); - SetWindowText (hwnd, "PuTTY (inactive)"); + session_closed = TRUE; + SetWindowText (hwnd, "PuTTY (inactive)"); + MessageBox(hwnd, "Connection closed by remote host", + "PuTTY", MB_OK | MB_ICONINFORMATION); } } } @@ -1220,11 +1215,10 @@ static LRESULT CALLBACK WndProc (HWND hwnd, UINT message, init_fonts(0); sfree(logpal); /* - * Telnet will change local echo -> remote if the - * remote asks. + * Flush the line discipline's edit buffer in the + * case where local editing has just been disabled. */ - if (cfg.protocol != PROT_TELNET) - ldisc = (cfg.ldisc_term ? &ldisc_term : &ldisc_simple); + ldisc_send(NULL, 0); if (pal) DeleteObject(pal); logpal = NULL; @@ -1615,7 +1609,7 @@ static LRESULT CALLBACK WndProc (HWND hwnd, UINT message, len = TranslateKey (message, wParam, lParam, buf); if (len == -1) return DefWindowProc (hwnd, message, wParam, lParam); - ldisc->send (buf, len); + ldisc_send (buf, len); if (len > 0) show_mouseptr(0); @@ -1628,7 +1622,7 @@ static LRESULT CALLBACK WndProc (HWND hwnd, UINT message, buf[1] = wParam; buf[0] = wParam >> 8; - ldisc->send (buf, 2); + ldisc_send (buf, 2); } case WM_CHAR: case WM_SYSCHAR: @@ -1640,7 +1634,7 @@ static LRESULT CALLBACK WndProc (HWND hwnd, UINT message, */ { char c = xlat_kbd2tty((unsigned char)wParam); - ldisc->send (&c, 1); + ldisc_send (&c, 1); } return 0; }