0
0
mirror of https://github.com/vim/vim.git synced 2025-09-24 03:44:06 -04:00

patch 8.0.0872: no mouse scroll with a terminal window

Problem:    Using mouse scroll while a terminal window has focus and the mouse
            pointer is on another window does not work.  Same for focus in a
            non-terminal window ahd the mouse pointer is over a terminal
            window.
Solution:   Send the scroll action to the right window.
This commit is contained in:
Bram Moolenaar
2017-08-05 19:34:47 +02:00
parent 086d535f77
commit 98fd66d311
4 changed files with 15 additions and 3 deletions

View File

@@ -4638,6 +4638,11 @@ nv_mousescroll(cmdarg_T *cap)
if (cap->arg == MSCR_UP || cap->arg == MSCR_DOWN) if (cap->arg == MSCR_UP || cap->arg == MSCR_DOWN)
{ {
# ifdef FEAT_TERMINAL
if (term_use_loop())
send_keys_to_term(curbuf->b_term, cap->cmdchar, TRUE);
else
# endif
if (mod_mask & (MOD_MASK_SHIFT | MOD_MASK_CTRL)) if (mod_mask & (MOD_MASK_SHIFT | MOD_MASK_CTRL))
{ {
(void)onepage(cap->arg ? FORWARD : BACKWARD, 1L); (void)onepage(cap->arg ? FORWARD : BACKWARD, 1L);

View File

@@ -5,6 +5,7 @@ void write_to_term(buf_T *buffer, char_u *msg, channel_T *channel);
int term_job_running(term_T *term); int term_job_running(term_T *term);
int term_in_terminal_mode(void); int term_in_terminal_mode(void);
void term_leave_terminal_mode(void); void term_leave_terminal_mode(void);
int send_keys_to_term(term_T *term, int c, int typed);
int term_use_loop(void); int term_use_loop(void);
int terminal_loop(void); int terminal_loop(void);
void term_job_ended(job_T *job); void term_job_ended(job_T *job);

View File

@@ -37,7 +37,6 @@
* *
* TODO: * TODO:
* - MS-Windows: no redraw for 'updatetime' #1915 * - MS-Windows: no redraw for 'updatetime' #1915
* - mouse scroll: when over other window, scroll that window.
* - add argument to term_wait() for waiting time. * - add argument to term_wait() for waiting time.
* - For the scrollback buffer store lines in the buffer, only attributes in * - For the scrollback buffer store lines in the buffer, only attributes in
* tl_scrollback. * tl_scrollback.
@@ -909,7 +908,7 @@ term_vgetc()
* Return FAIL when the key needs to be handled in Normal mode. * Return FAIL when the key needs to be handled in Normal mode.
* Return OK when the key was dropped or sent to the terminal. * Return OK when the key was dropped or sent to the terminal.
*/ */
static int int
send_keys_to_term(term_T *term, int c, int typed) send_keys_to_term(term_T *term, int c, int typed)
{ {
char msg[KEY_BUF_LEN]; char msg[KEY_BUF_LEN];
@@ -948,13 +947,18 @@ send_keys_to_term(term_T *term, int c, int typed)
case K_X1RELEASE: case K_X1RELEASE:
case K_X2MOUSE: case K_X2MOUSE:
case K_X2RELEASE: case K_X2RELEASE:
case K_MOUSEUP:
case K_MOUSEDOWN:
case K_MOUSELEFT:
case K_MOUSERIGHT:
if (mouse_row < W_WINROW(curwin) if (mouse_row < W_WINROW(curwin)
|| mouse_row >= (W_WINROW(curwin) + curwin->w_height) || mouse_row >= (W_WINROW(curwin) + curwin->w_height)
|| mouse_col < W_WINCOL(curwin) || mouse_col < W_WINCOL(curwin)
|| mouse_col >= W_ENDCOL(curwin) || mouse_col >= W_ENDCOL(curwin)
|| dragging_outside) || dragging_outside)
{ {
/* click outside the current window */ /* click or scroll outside the current window */
if (typed) if (typed)
{ {
stuffcharReadbuff(c); stuffcharReadbuff(c);

View File

@@ -769,6 +769,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
872,
/**/ /**/
871, 871,
/**/ /**/