diff --git a/src/mouse.c b/src/mouse.c index f895779ac5..b283c6479a 100644 --- a/src/mouse.c +++ b/src/mouse.c @@ -2050,7 +2050,9 @@ retnomove: } } - if (prev_row >= 0 && prev_row < Rows && prev_col >= 0 && prev_col <= Columns + if (prev_row >= W_WINROW(curwin) + && prev_row < W_WINROW(curwin) + curwin->w_height + && prev_col >= curwin->w_wincol && prev_col < W_ENDCOL(curwin) && ScreenLines != NULL) { int off = LineOffset[prev_row] + prev_col; diff --git a/src/testdir/test_visual.vim b/src/testdir/test_visual.vim index 290641e1df..401a3504ae 100644 --- a/src/testdir/test_visual.vim +++ b/src/testdir/test_visual.vim @@ -1585,6 +1585,41 @@ func Test_Visual_r_CTRL_C() call feedkeys("\$gr\", 'tx') call assert_equal([''], getline(1, 1)) bw! -endfu +endfunc + +func Test_visual_drag_out_of_window() + rightbelow vnew + call setline(1, '123456789') + set mouse=a + func ClickExpr(off) + call test_setmouse(1, getwininfo(win_getid())[0].wincol + a:off) + return "\" + endfunc + func DragExpr(off) + call test_setmouse(1, getwininfo(win_getid())[0].wincol + a:off) + return "\" + endfunc + + nnoremap ClickExpr(5) + nnoremap DragExpr(-1) + redraw + call feedkeys("\\\", 'tx') + call assert_equal([1, 6], [col('.'), col('v')]) + call feedkeys("\", 'tx') + + nnoremap ClickExpr(6) + nnoremap DragExpr(-2) + redraw + call feedkeys("\\\", 'tx') + call assert_equal([1, 7], [col('.'), col('v')]) + call feedkeys("\", 'tx') + + nunmap + nunmap + delfunc ClickExpr + delfunc DragExpr + set mouse& + bwipe! +endfunc " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c index e65c2310cd..b8dfc98a2c 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 2177, /**/ 2176, /**/