mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-04-20 12:38:06 -05:00
Two more small bugs introduced by the B-tree reorg: scroll() now
requires fix_cpos() to be called after it (otherwise cpos might point to a line that isn't where you remember it being), and a mis-aimed incpos() was causing forward selection dragging not to include the char under the mouse. Both fixed. [originally from svn r1063]
This commit is contained in:
parent
04b2c2b53e
commit
34d2d98bdd
@ -461,6 +461,11 @@ static void check_selection (pos from, pos to) {
|
|||||||
* Scroll the screen. (`lines' is +ve for scrolling forward, -ve
|
* Scroll the screen. (`lines' is +ve for scrolling forward, -ve
|
||||||
* for backward.) `sb' is TRUE if the scrolling is permitted to
|
* for backward.) `sb' is TRUE if the scrolling is permitted to
|
||||||
* affect the scrollback buffer.
|
* affect the scrollback buffer.
|
||||||
|
*
|
||||||
|
* NB this function invalidates all pointers into lines of the
|
||||||
|
* screen data structures. In particular, you MUST call fix_cpos
|
||||||
|
* after calling scroll() and before doing anything else that
|
||||||
|
* uses the cpos shortcut pointer.
|
||||||
*/
|
*/
|
||||||
static void scroll (int topline, int botline, int lines, int sb) {
|
static void scroll (int topline, int botline, int lines, int sb) {
|
||||||
unsigned long *line, *line2;
|
unsigned long *line, *line2;
|
||||||
@ -1244,12 +1249,14 @@ void term_out(void) {
|
|||||||
compatibility(VT102);
|
compatibility(VT102);
|
||||||
if (curs.y <= marg_b)
|
if (curs.y <= marg_b)
|
||||||
scroll (curs.y, marg_b, -def(esc_args[0], 1), FALSE);
|
scroll (curs.y, marg_b, -def(esc_args[0], 1), FALSE);
|
||||||
|
fix_cpos;
|
||||||
seen_disp_event = TRUE;
|
seen_disp_event = TRUE;
|
||||||
break;
|
break;
|
||||||
case 'M': /* delete lines */
|
case 'M': /* delete lines */
|
||||||
compatibility(VT102);
|
compatibility(VT102);
|
||||||
if (curs.y <= marg_b)
|
if (curs.y <= marg_b)
|
||||||
scroll (curs.y, marg_b, def(esc_args[0], 1), TRUE);
|
scroll (curs.y, marg_b, def(esc_args[0], 1), TRUE);
|
||||||
|
fix_cpos;
|
||||||
seen_disp_event = TRUE;
|
seen_disp_event = TRUE;
|
||||||
break;
|
break;
|
||||||
case '@': /* insert chars */
|
case '@': /* insert chars */
|
||||||
@ -2218,7 +2225,7 @@ void term_mouse (Mouse_Button b, Mouse_Action a, int x, int y) {
|
|||||||
} else {
|
} else {
|
||||||
selstart = selanchor;
|
selstart = selanchor;
|
||||||
selend = selpoint;
|
selend = selpoint;
|
||||||
incpos(selpoint);
|
incpos(selend);
|
||||||
}
|
}
|
||||||
sel_spread();
|
sel_spread();
|
||||||
} else if ((b == MB_SELECT || b == MB_EXTEND) && a == MA_RELEASE) {
|
} else if ((b == MB_SELECT || b == MB_EXTEND) && a == MA_RELEASE) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user