aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2024-07-05 07:24:45 +0800
committerGitHub <noreply@github.com>2024-07-05 07:24:45 +0800
commit81d4e96bc8685876943d8a7549004f128501da17 (patch)
treeb6c81bd5546773faad3a66ae6b9e8a2198e9ae2e
parent6cbba2b48d604b5fdbd874d75c30c6c55449f33e (diff)
downloadrneovim-81d4e96bc8685876943d8a7549004f128501da17.tar.gz
rneovim-81d4e96bc8685876943d8a7549004f128501da17.tar.bz2
rneovim-81d4e96bc8685876943d8a7549004f128501da17.zip
fix(mouse): don't treat click on hsep as click on statusline (#29565)
This allows showing popup menu when right-clicking on hsep or cmdline.
-rw-r--r--src/nvim/mouse.c10
-rw-r--r--test/functional/ui/mouse_spec.lua19
-rw-r--r--test/functional/ui/statuscolumn_spec.lua3
3 files changed, 27 insertions, 5 deletions
diff --git a/src/nvim/mouse.c b/src/nvim/mouse.c
index bd245bdca3..6bd40003ea 100644
--- a/src/nvim/mouse.c
+++ b/src/nvim/mouse.c
@@ -250,11 +250,17 @@ static int get_fpos_of_mouse(pos_T *mpos)
}
// winpos and height may change in win_enter()!
- if (winrow >= wp->w_height_inner) { // In (or below) status line
+ if (winrow >= wp->w_height_inner + wp->w_status_height) { // Below window
+ if (mouse_grid <= 1 && mouse_row < Rows - p_ch
+ && mouse_row >= Rows - p_ch - global_stl_height()) { // In global status line
+ return IN_STATUS_LINE;
+ }
+ return IN_UNKNOWN;
+ } else if (winrow >= wp->w_height_inner) { // In window status line
return IN_STATUS_LINE;
}
- if (winrow < 0 && winrow + wp->w_winbar_height >= 0) {
+ if (winrow < 0 && winrow + wp->w_winbar_height >= 0) { // In winbar
return MOUSE_WINBAR;
}
diff --git a/test/functional/ui/mouse_spec.lua b/test/functional/ui/mouse_spec.lua
index 42c877fd92..0228708958 100644
--- a/test/functional/ui/mouse_spec.lua
+++ b/test/functional/ui/mouse_spec.lua
@@ -2002,5 +2002,24 @@ describe('ui/mouse/input', function()
feed('<Down><CR>')
eq({ 4, 20 }, api.nvim_win_get_cursor(0))
eq('the moon', fn.getreg('"'))
+
+ -- Try clicking in the cmdline
+ api.nvim_input_mouse('right', 'press', '', 0, 23, 0)
+ api.nvim_input_mouse('right', 'release', '', 0, 23, 0)
+ feed('<Down><Down><Down><CR>')
+ eq('baz', api.nvim_get_var('menustr'))
+
+ -- Try clicking in horizontal separator with global statusline
+ command('set laststatus=3')
+ api.nvim_input_mouse('right', 'press', '', 0, 5, 0)
+ api.nvim_input_mouse('right', 'release', '', 0, 5, 0)
+ feed('<Down><CR>')
+ eq('foo', api.nvim_get_var('menustr'))
+
+ -- Try clicking in the cmdline with global statusline
+ api.nvim_input_mouse('right', 'press', '', 0, 23, 0)
+ api.nvim_input_mouse('right', 'release', '', 0, 23, 0)
+ feed('<Down><Down><CR>')
+ eq('bar', api.nvim_get_var('menustr'))
end)
end)
diff --git a/test/functional/ui/statuscolumn_spec.lua b/test/functional/ui/statuscolumn_spec.lua
index 7ee7f38d07..b4d4c94a5e 100644
--- a/test/functional/ui/statuscolumn_spec.lua
+++ b/test/functional/ui/statuscolumn_spec.lua
@@ -652,9 +652,6 @@ describe('statuscolumn', function()
-- Check that statusline click doesn't register as statuscolumn click
api.nvim_input_mouse('right', 'press', '', 0, 12, 0)
eq('', eval('g:testvar'))
- -- Check that cmdline click doesn't register as statuscolumn click
- api.nvim_input_mouse('right', 'press', '', 0, 13, 0)
- eq('', eval('g:testvar'))
end)
it('clicks and highlights work with control characters', function()