fix(terminal): don't lose focus on <MouseMove> (#25845)

This commit is contained in:
zeertzjq 2023-10-31 12:05:37 +08:00 committed by GitHub
parent 6d1a2f2c3c
commit c881092ffe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 6 deletions

View File

@ -1506,13 +1506,14 @@ static bool send_mouse_event(Terminal *term, int c)
return mouse_win == curwin; return mouse_win == curwin;
} }
// ignore left release action if it was not processed above end:
// to prevent leaving Terminal mode after entering to it using a mouse // Ignore left release action if it was not forwarded to prevent
if (c == K_LEFTRELEASE && mouse_win->w_buffer->terminal == term) { // leaving Terminal mode after entering to it using a mouse.
if ((c == K_LEFTRELEASE && mouse_win != NULL && mouse_win->w_buffer->terminal == term)
|| c == K_MOUSEMOVE) {
return false; return false;
} }
end:
ins_char_typebuf(vgetc_char, vgetc_mod_mask); ins_char_typebuf(vgetc_char, vgetc_mod_mask);
return true; return true;
} }

View File

@ -67,8 +67,23 @@ describe(':terminal mouse', function()
eq('nt', eval('mode(1)')) eq('nt', eval('mode(1)'))
end) end)
it('does not leave terminal mode on left-release', function() it('will not exit focus on left-release', function()
feed('<LeftRelease>') eq('t', eval('mode(1)'))
feed('<LeftRelease><0,0>')
eq('t', eval('mode(1)'))
command('setlocal number')
eq('t', eval('mode(1)'))
feed('<LeftRelease><0,0>')
eq('t', eval('mode(1)'))
end)
it('will not exit focus on mouse movement', function()
eq('t', eval('mode(1)'))
feed('<MouseMove><0,0>')
eq('t', eval('mode(1)'))
command('setlocal number')
eq('t', eval('mode(1)'))
feed('<MouseMove><0,0>')
eq('t', eval('mode(1)')) eq('t', eval('mode(1)'))
end) end)