Commit: patch 9.0.2177: Wrong cursor position when dragging out of window

4 views
Skip to first unread message

Christian Brabandt

unread,
Dec 19, 2023, 2:30:14 PM12/19/23
to vim...@googlegroups.com
patch 9.0.2177: Wrong cursor position when dragging out of window

Commit: https://github.com/vim/vim/commit/ec14924368e23f2430815c009bd554f88de9c57f
Author: zeertzjq <zeer...@outlook.com>
Date: Tue Dec 19 20:28:31 2023 +0100

patch 9.0.2177: Wrong cursor position when dragging out of window

Problem: Wrong cursor position when dragging out of window.
Solution: Don't use ScreenCols[] when mouse is not in current window.

closes: #13717

Signed-off-by: zeertzjq <zeer...@outlook.com>
Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/src/mouse.c b/src/mouse.c
index f895779ac..b283c6479 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 290641e1d..401a3504a 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("\<c-v>$gr\<c-c>", '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 "\<LeftMouse>"
+ endfunc
+ func DragExpr(off)
+ call test_setmouse(1, getwininfo(win_getid())[0].wincol + a:off)
+ return "\<LeftDrag>"
+ endfunc
+
+ nnoremap <expr> <F2> ClickExpr(5)
+ nnoremap <expr> <F3> DragExpr(-1)
+ redraw
+ call feedkeys("\<F2>\<F3>\<LeftRelease>", 'tx')
+ call assert_equal([1, 6], [col('.'), col('v')])
+ call feedkeys("\<Esc>", 'tx')
+
+ nnoremap <expr> <F2> ClickExpr(6)
+ nnoremap <expr> <F3> DragExpr(-2)
+ redraw
+ call feedkeys("\<F2>\<F3>\<LeftRelease>", 'tx')
+ call assert_equal([1, 7], [col('.'), col('v')])
+ call feedkeys("\<Esc>", 'tx')
+
+ nunmap <F2>
+ nunmap <F3>
+ 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 e65c2310c..b8dfc98a2 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,
/**/
Reply all
Reply to author
Forward
0 new messages