X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/putty/blobdiff_plain/6cc1b78c02d74f9432e719d2e3e79b42d00e119e..199a0c6ebd4b9eb8a8b71aa1b1a8030355f6542b:/terminal.c diff --git a/terminal.c b/terminal.c index 806d650c..956af211 100644 --- a/terminal.c +++ b/terminal.c @@ -5578,7 +5578,16 @@ void term_mouse(Terminal *term, Mouse_Button braw, Mouse_Button bcooked, selpoint.x = x; unlineptr(ldata); - if (raw_mouse) { + /* + * If we're in the middle of a selection operation, we ignore raw + * mouse mode until it's done (we must have been not in raw mouse + * mode when it started). + * This makes use of Shift for selection reliable, and avoids the + * host seeing mouse releases for which they never saw corresponding + * presses. + */ + if (raw_mouse && + (term->selstate != ABOUT_TO) && (term->selstate != DRAGGING)) { int encstate = 0, r, c; char abuf[16];