projects
/
u
/
mdw
/
putty
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Jacob's patch to make passphrase boxes work more sanely
[u/mdw/putty]
/
terminal.c
diff --git
a/terminal.c
b/terminal.c
index
7d6c727
..
657aff7
100644
(file)
--- a/
terminal.c
+++ b/
terminal.c
@@
-369,7
+369,7
@@
void term_size(int newrows, int newcols, int newsavelines) {
for (i=0; i<newrows; i++) {
line = smalloc(TSIZE * (newcols+1));
for (j = 0; j <= newcols; j++)
for (i=0; i<newrows; i++) {
line = smalloc(TSIZE * (newcols+1));
for (j = 0; j <= newcols; j++)
- line[
i
] = erase_char;
+ line[
j
] = erase_char;
addpos234(newalt, line, i);
}
if (alt_screen) {
addpos234(newalt, line, i);
}
if (alt_screen) {
@@
-461,12
+461,17
@@
static void check_selection (pos from, pos to) {
* Scroll the screen. (`lines' is +ve for scrolling forward, -ve
* for backward.) `sb' is TRUE if the scrolling is permitted to
* affect the scrollback buffer.
* Scroll the screen. (`lines' is +ve for scrolling forward, -ve
* for backward.) `sb' is TRUE if the scrolling is permitted to
* 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) {
unsigned long *line, *line2;
int i;
*/
static void scroll (int topline, int botline, int lines, int sb) {
unsigned long *line, *line2;
int i;
- if (topline != 0)
+ if (topline != 0
|| alt_which != 0
)
sb = FALSE;
if (lines < 0) {
sb = FALSE;
if (lines < 0) {
@@
-1244,12
+1249,14
@@
void term_out(void) {
compatibility(VT102);
if (curs.y <= marg_b)
scroll (curs.y, marg_b, -def(esc_args[0], 1), FALSE);
compatibility(VT102);
if (curs.y <= marg_b)
scroll (curs.y, marg_b, -def(esc_args[0], 1), FALSE);
+ fix_cpos;
seen_disp_event = TRUE;
break;
case 'M': /* delete lines */
compatibility(VT102);
if (curs.y <= marg_b)
scroll (curs.y, marg_b, def(esc_args[0], 1), TRUE);
seen_disp_event = TRUE;
break;
case 'M': /* delete lines */
compatibility(VT102);
if (curs.y <= marg_b)
scroll (curs.y, marg_b, def(esc_args[0], 1), TRUE);
+ fix_cpos;
seen_disp_event = TRUE;
break;
case '@': /* insert chars */
seen_disp_event = TRUE;
break;
case '@': /* insert chars */
@@
-2218,7
+2225,7
@@
void term_mouse (Mouse_Button b, Mouse_Action a, int x, int y) {
} else {
selstart = selanchor;
selend = selpoint;
} else {
selstart = selanchor;
selend = selpoint;
- incpos(sel
point
);
+ incpos(sel
end
);
}
sel_spread();
} else if ((b == MB_SELECT || b == MB_EXTEND) && a == MA_RELEASE) {
}
sel_spread();
} else if ((b == MB_SELECT || b == MB_EXTEND) && a == MA_RELEASE) {