Merge pull request #25091 from neovim/backport-25090-to-release-0.9

[Backport release-0.9] fix(mouse): click on 'statuscolumn' with 'rightleft'
This commit is contained in:
zeertzjq 2023-09-11 08:42:24 +08:00 committed by GitHub
commit 51edadcaeb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 30 additions and 2 deletions

View File

@ -218,7 +218,10 @@ static int get_fpos_of_mouse(pos_T *mpos)
// compute the position in the buffer line from the posn on the screen
bool below_buffer = mouse_comp_pos(wp, &row, &col, &mpos->lnum);
if (!below_buffer && *wp->w_p_stc != NUL && mouse_col < win_col_off(wp)) {
if (!below_buffer && *wp->w_p_stc != NUL
&& (wp->w_p_rl
? wincol >= wp->w_width_inner - win_col_off(wp)
: wincol < win_col_off(wp))) {
return MOUSE_STATUSCOL;
}
@ -673,6 +676,10 @@ popupexit:
click_col = mouse_col;
}
if (in_statuscol && wp->w_p_rl) {
click_col = wp->w_width_inner - click_col - 1;
}
if (click_defs != NULL) {
switch (click_defs[click_col].type) {
case kStlClickDisabled:
@ -1111,7 +1118,10 @@ retnomove:
on_sep_line = grid == DEFAULT_GRID_HANDLE && col >= wp->w_width && col - wp->w_width + 1 == 1;
on_winbar = row == -1 && wp->w_winbar_height != 0;
on_statuscol = !below_window && !on_status_line && !on_sep_line && !on_winbar
&& *wp->w_p_stc != NUL && col < win_col_off(wp);
&& *wp->w_p_stc != NUL
&& (wp->w_p_rl
? col >= wp->w_width_inner - win_col_off(wp)
: col < win_col_off(wp));
// The rightmost character of the status line might be a vertical
// separator character if there is no connecting window to the right.

View File

@ -530,6 +530,24 @@ describe('statuscolumn', function()
eq('0 3 r 7', eval("g:testvar"))
meths.input_mouse('right', 'press', '', 0, 3, 0)
eq('0 4 r 7', eval("g:testvar"))
command('rightbelow vsplit')
meths.input_mouse('left', 'press', '', 0, 0, 27)
eq('0 1 l 4', eval("g:testvar"))
meths.input_mouse('right', 'press', '', 0, 3, 27)
eq('0 1 r 7', eval("g:testvar"))
command('setlocal rightleft')
meths.input_mouse('left', 'press', '', 0, 0, 52)
eq('0 1 l 4', eval("g:testvar"))
meths.input_mouse('right', 'press', '', 0, 3, 52)
eq('0 1 r 7', eval("g:testvar"))
command('wincmd H')
meths.input_mouse('left', 'press', '', 0, 0, 25)
eq('0 1 l 4', eval("g:testvar"))
meths.input_mouse('right', 'press', '', 0, 3, 25)
eq('0 1 r 7', eval("g:testvar"))
command('close')
command('set laststatus=2 winbar=%f')
command('let g:testvar = ""')
-- Check that winbar click doesn't register as statuscolumn click