Fix double/triple click, and improve drag select
[u/mdw/putty] / terminal.c
index 1e286ce..b41eacd 100644 (file)
@@ -628,6 +628,8 @@ void term_out(void) {
                    scroll (marg_t, marg_b, 1, TRUE);
                else if (curs_y < rows-1)
                    curs_y++;
+                if (cfg.lfhascr)
+                    curs_x = 0;
                fix_cpos;
                wrapnext = FALSE;
                disptop = scrtop;
@@ -1254,8 +1256,8 @@ void term_paint (Context ctx, int l, int t, int r, int b) {
     right = (r - 1) / font_width;
     top = t / font_height;
     bottom = (b - 1) / font_height;
-    for (i = top; i <= bottom; i++)
-       for (j = left; j <= right; j++)
+    for (i = top; i <= bottom && i < rows ; i++)
+      for (j = left; j <= right && j < cols ; j++)
            disptext[i*(cols+1)+j] = ATTR_INVALID;
 
     do_paint (ctx, FALSE);
@@ -1339,7 +1341,14 @@ static void sel_spread (void) {
 }
 
 void term_mouse (Mouse_Button b, Mouse_Action a, int x, int y) {
-    unsigned long *selpoint = disptop + y * (cols+1) + x;
+    unsigned long *selpoint;
+    
+    if (y<0) y = 0;
+    if (y>=rows) y = rows-1;
+    if (x<0) x = 0;
+    if (x>=cols) x = cols-1;
+
+    selpoint = disptop + y * (cols+1) + x;
 
     if (b == MB_SELECT && a == MA_CLICK) {
        deselect();