X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/979f69871f000309e798393dc8964ba9782b9906..3ad9d396e3e57477b4da4b20665ca33edd5d7f67:/terminal.c diff --git a/terminal.c b/terminal.c index f0dc9b11..8f8ec157 100644 --- a/terminal.c +++ b/terminal.c @@ -3100,7 +3100,7 @@ void term_mouse(Mouse_Button b, Mouse_Action a, int x, int y, if ((ldata[cols] & LATTR_MODE) != LATTR_NORM) selpoint.x /= 2; - if (xterm_mouse) { + if (xterm_mouse && !(cfg.mouse_override && shift)) { int encstate = 0, r, c; char abuf[16]; static int is_down = 0; @@ -3281,13 +3281,33 @@ int term_ldisc(int option) /* * from_backend(), to get data from the backend for the terminal. */ -void from_backend(int is_stderr, char *data, int len) +int from_backend(int is_stderr, char *data, int len) { while (len--) { if (inbuf_head >= INBUF_SIZE) term_out(); inbuf[inbuf_head++] = *data++; } + + /* + * We process all stdout/stderr data immediately we receive it, + * and don't return until it's all gone. Therefore, there's no + * reason at all to return anything other than zero from this + * function. + * + * This is a slightly suboptimal way to deal with SSH2 - in + * principle, the window mechanism would allow us to continue + * to accept data on forwarded ports and X connections even + * while the terminal processing was going slowly - but we + * can't do the 100% right thing without moving the terminal + * processing into a separate thread, and that might hurt + * portability. So we manage stdout buffering the old SSH1 way: + * if the terminal processing goes slowly, the whole SSH + * connection stops accepting data until it's ready. + * + * In practice, I can't imagine this causing serious trouble. + */ + return 0; } /*