]> granicus.if.org Git - vim/commitdiff
patch 8.0.0872: no mouse scroll with a terminal window v8.0.0872
authorBram Moolenaar <Bram@vim.org>
Sat, 5 Aug 2017 17:34:47 +0000 (19:34 +0200)
committerBram Moolenaar <Bram@vim.org>
Sat, 5 Aug 2017 17:34:47 +0000 (19:34 +0200)
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.

src/normal.c
src/proto/terminal.pro
src/terminal.c
src/version.c

index 16f9f0ea5ad7f7ca3185792aef14ab9898a603c6..25ab2d345cb4b0038e6d5a4f76c67771d57328cf 100644 (file)
@@ -4638,6 +4638,11 @@ nv_mousescroll(cmdarg_T *cap)
 
     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))
        {
            (void)onepage(cap->arg ? FORWARD : BACKWARD, 1L);
index 157b6aaafbffd34ecb987b9372f55b6188677004..b6c27ed0b64e3470174f92fd5b73fb8dc3b68dd1 100644 (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_in_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 terminal_loop(void);
 void term_job_ended(job_T *job);
index 0f5382bacd2e892b131e47277475eaed0dc70564..20c927248a3c60655535272ef371343f05eac5e5 100644 (file)
@@ -37,7 +37,6 @@
  *
  * TODO:
  * - MS-Windows: no redraw for 'updatetime'  #1915
- * - mouse scroll: when over other window, scroll that window.
  * - add argument to term_wait() for waiting time.
  * - For the scrollback buffer store lines in the buffer, only attributes in
  *   tl_scrollback.
@@ -909,7 +908,7 @@ term_vgetc()
  * Return FAIL when the key needs to be handled in Normal mode.
  * 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)
 {
     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_X2MOUSE:
        case K_X2RELEASE:
+
+       case K_MOUSEUP:
+       case K_MOUSEDOWN:
+       case K_MOUSELEFT:
+       case K_MOUSERIGHT:
            if (mouse_row < W_WINROW(curwin)
                    || mouse_row >= (W_WINROW(curwin) + curwin->w_height)
                    || mouse_col < W_WINCOL(curwin)
                    || mouse_col >= W_ENDCOL(curwin)
                    || dragging_outside)
            {
-               /* click outside the current window */
+               /* click or scroll outside the current window */
                if (typed)
                {
                    stuffcharReadbuff(c);
index 758ea20598f594f80168e8303b3accab0f30aac2..b3f3eb5253467a850cb8a722acd211bf066eb524 100644 (file)
@@ -769,6 +769,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    872,
 /**/
     871,
 /**/