]> granicus.if.org Git - vim/commitdiff
patch 8.0.1323: mouse events in a terminal window may cause endless loop v8.0.1323
authorBram Moolenaar <Bram@vim.org>
Mon, 20 Nov 2017 20:49:19 +0000 (21:49 +0100)
committerBram Moolenaar <Bram@vim.org>
Mon, 20 Nov 2017 20:49:19 +0000 (21:49 +0100)
Problem:    Mouse events in a terminal window may cause endless loop.
Solution:   Adjust position computation.  Don't stuff a mouse event when
            coming from normal_cmd().

src/normal.c
src/terminal.c
src/version.c

index b385c0d4d69ef19f357a39a8124d3cd58ffdb495..fb0129aec7ea12056245ecfe0aae3b231a376396 100644 (file)
@@ -4633,7 +4633,9 @@ nv_mousescroll(cmdarg_T *cap)
     {
 # ifdef FEAT_TERMINAL
        if (term_use_loop())
-           send_keys_to_term(curbuf->b_term, cap->cmdchar, TRUE);
+           /* This window is a terminal window, send the mouse event there.
+            * Set "typed" to FALSE to avoid an endless loop. */
+           send_keys_to_term(curbuf->b_term, cap->cmdchar, FALSE);
        else
 # endif
        if (mod_mask & (MOD_MASK_SHIFT | MOD_MASK_CTRL))
index f1b4313ad8582e6aaf1d00a868fb45a9553b8f1c..a4caa42edab5730f9e9860b31d621538894a6c4a 100644 (file)
@@ -1302,9 +1302,9 @@ send_keys_to_term(term_T *term, int c, int typed)
        case K_MOUSELEFT:
        case K_MOUSERIGHT:
            if (mouse_row < W_WINROW(curwin)
-                   || mouse_row >= (W_WINROW(curwin) + curwin->w_height)
+                   || mouse_row > (W_WINROW(curwin) + curwin->w_height)
                    || mouse_col < curwin->w_wincol
-                   || mouse_col >= W_ENDCOL(curwin)
+                   || mouse_col > W_ENDCOL(curwin)
                    || dragging_outside)
            {
                /* click or scroll outside the current window */
index de5175fd389e5bf1cfc8de8da7ecaebfb932bf24..bbb57659496c37bea45d57a244e9b9ed280989f9 100644 (file)
@@ -771,6 +771,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1323,
 /**/
     1322,
 /**/