From 0dcfd0e8d101389fb6a33a7e887114ea0c062648 Mon Sep 17 00:00:00 2001 From: Ville Hakulinen Date: Fri, 10 Sep 2021 17:24:41 +0300 Subject: [PATCH] fix(mouse.c): fix mouse drag positions on multigrid #12667 Currently, multigrid mouse drag positions are handled incorrectly if the drag event is not in the top left grid. Fix this by not adjusting the position of the event in jump_to_mouse. related: #15091 --- src/nvim/mouse.c | 4 -- test/functional/ui/multigrid_spec.lua | 61 +++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 4 deletions(-) diff --git a/src/nvim/mouse.c b/src/nvim/mouse.c index c599f4ea97..c4fa269851 100644 --- a/src/nvim/mouse.c +++ b/src/nvim/mouse.c @@ -228,10 +228,6 @@ retnomove: redraw_curbuf_later(INVERTED); // delete the inversion } - - row -= curwin->w_winrow; - col -= curwin->w_wincol; - // When clicking beyond the end of the window, scroll the screen. // Scroll by however many rows outside the window we are. if (row < 0) { diff --git a/test/functional/ui/multigrid_spec.lua b/test/functional/ui/multigrid_spec.lua index 03cb43a7d1..fdf8e66e4f 100644 --- a/test/functional/ui/multigrid_spec.lua +++ b/test/functional/ui/multigrid_spec.lua @@ -34,6 +34,7 @@ describe('ext_multigrid', function() [17] = {background = Screen.colors.LightGrey, underline = true, bold = true, foreground = Screen.colors.Magenta}, [18] = {bold = true, foreground = Screen.colors.Magenta}, [19] = {foreground = Screen.colors.Brown}, + [20] = {background = Screen.colors.LightGrey}, }) end) @@ -2034,6 +2035,66 @@ describe('ext_multigrid', function() ]]} end) + it('supports mouse drag with mouse=a', function() + command('set mouse=a') + command('vsplit') + command('wincmd l') + command('split') + command('enew') + feed('ifoo\nbar') + + meths.input_mouse('left', 'press', '', 5, 0, 0) + poke_eventloop() + meths.input_mouse('left', 'drag', '', 5, 1, 2) + + screen:expect{grid=[[ + ## grid 1 + [4:--------------------------]{12:│}[5:--------------------------]| + [4:--------------------------]{12:│}[5:--------------------------]| + [4:--------------------------]{12:│}[5:--------------------------]| + [4:--------------------------]{12:│}[5:--------------------------]| + [4:--------------------------]{12:│}[5:--------------------------]| + [4:--------------------------]{12:│}[5:--------------------------]| + [4:--------------------------]{12:│}{11:[No Name] [+] }| + [4:--------------------------]{12:│}[2:--------------------------]| + [4:--------------------------]{12:│}[2:--------------------------]| + [4:--------------------------]{12:│}[2:--------------------------]| + [4:--------------------------]{12:│}[2:--------------------------]| + [4:--------------------------]{12:│}[2:--------------------------]| + {12:[No Name] [No Name] }| + [3:-----------------------------------------------------]| + ## grid 2 + | + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + ## grid 3 + {7:-- VISUAL --} | + ## grid 4 + | + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + ## grid 5 + {20:foo} | + {20:ba}^r | + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + ]]} + + end) + it('has viewport information', function() screen:try_resize(48, 8) screen:expect{grid=[[