diff options
author | Yee Cheng Chin <ychin.git@gmail.com> | 2022-10-13 13:17:40 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-10-13 13:17:40 +0100 |
commit | 17822c507c03d509037c9ee5eee5cfbb201b3f01 (patch) | |
tree | 71ab21115f394f99e74d76a56ccde2e124613dd9 /src/mouse.c | |
parent | 91ccbad5ded8bcf2cc93a873ff2c3179b0c548c7 (diff) |
patch 9.0.0739: mouse column not correctly used for popup_setposv9.0.0739
Problem: Mouse column not correctly used for popup_setpos.
Solution: Adjust off-by-one error and handle Visual line selection properly.
(Yee Cheng Chin, closes #11356)
Diffstat (limited to 'src/mouse.c')
-rw-r--r-- | src/mouse.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/src/mouse.c b/src/mouse.c index 452a30131b..9efd148ecb 100644 --- a/src/mouse.c +++ b/src/mouse.c @@ -141,7 +141,9 @@ find_end_of_word(pos_T *pos) # define NEED_VCOL2COL /* - * Translate window coordinates to buffer position without any side effects + * Translate window coordinates to buffer position without any side effects. + * Returns IN_BUFFER and sets "mpos->col" to the column when in buffer text. + * The column is one for the first column. */ static int get_fpos_of_mouse(pos_T *mpos) @@ -172,8 +174,6 @@ get_fpos_of_mouse(pos_T *mpos) mpos->col = vcol2col(wp, mpos->lnum, col); - if (mpos->col > 0) - --mpos->col; mpos->coladd = 0; return IN_BUFFER; } @@ -598,7 +598,19 @@ do_mouse( jump_flags = MOUSE_MAY_STOP_VIS; else { - if ((LT_POS(curwin->w_cursor, VIsual) + if (VIsual_mode == 'V') + { + if ((curwin->w_cursor.lnum <= VIsual.lnum + && (m_pos.lnum < curwin->w_cursor.lnum + || VIsual.lnum < m_pos.lnum)) + || (VIsual.lnum < curwin->w_cursor.lnum + && (m_pos.lnum < VIsual.lnum + || curwin->w_cursor.lnum < m_pos.lnum))) + { + jump_flags = MOUSE_MAY_STOP_VIS; + } + } + else if ((LTOREQ_POS(curwin->w_cursor, VIsual) && (LT_POS(m_pos, curwin->w_cursor) || LT_POS(VIsual, m_pos))) || (LT_POS(VIsual, curwin->w_cursor) |