To: vim_dev@googlegroups.com Subject: Patch 8.2.1186 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.1186 Problem: With SGR mouse codes balloon doesn't show up after click. Solution: Add the MOUSE_RELEASE bits to mouse_code. Files: src/mouse.c *** ../vim-8.2.1185/src/mouse.c 2020-07-01 15:49:26.300450527 +0200 --- src/mouse.c 2020-07-12 13:46:22.784242948 +0200 *************** *** 2145,2152 **** ) { /* ! * For xterm we get "scr", where ! * s == encoded button state: * 0x20 = left button down * 0x21 = middle button down * 0x22 = right button down --- 2145,2151 ---- ) { /* ! * For xterm we get "scr", where s == encoded button state: * 0x20 = left button down * 0x21 = middle button down * 0x22 = right button down *************** *** 2162,2170 **** * c == column + ' ' + 1 == column + 33 * r == row + ' ' + 1 == row + 33 * ! * The coordinates are passed on through global variables. ! * Ugly, but this avoids trouble with mouse clicks at an ! * unexpected moment and allows for mapping them. */ for (;;) { --- 2161,2169 ---- * c == column + ' ' + 1 == column + 33 * r == row + ' ' + 1 == row + 33 * ! * The coordinates are passed on through global variables. Ugly, but ! * this avoids trouble with mouse clicks at an unexpected moment and ! * allows for mapping them. */ for (;;) { *************** *** 2193,2201 **** } *slen += num_bytes; ! // If the following bytes is also a mouse code and it has ! // the same code, dump this one and get the next. This ! // makes dragging a whole lot faster. # ifdef FEAT_GUI if (gui.in_use) j = 3; --- 2192,2200 ---- } *slen += num_bytes; ! // If the following bytes is also a mouse code and it has the same ! // code, dump this one and get the next. This makes dragging a ! // whole lot faster. # ifdef FEAT_GUI if (gui.in_use) j = 3; *************** *** 2223,2230 **** || key_name[0] == KS_SGR_MOUSE_RELEASE) { // URXVT 1015 mouse reporting mode: ! // Almost identical to xterm mouse mode, except the values ! // are decimal instead of bytes. // // \033[%d;%d;%dM // ^-- row --- 2222,2229 ---- || key_name[0] == KS_SGR_MOUSE_RELEASE) { // URXVT 1015 mouse reporting mode: ! // Almost identical to xterm mouse mode, except the values are decimal ! // instead of bytes. // // \033[%d;%d;%dM // ^-- row *************** *** 2232,2239 **** // ^-------- code // // SGR 1006 mouse reporting mode: ! // Almost identical to xterm mouse mode, except the values ! // are decimal instead of bytes. // // \033[<%d;%d;%dM // ^-- row --- 2231,2238 ---- // ^-------- code // // SGR 1006 mouse reporting mode: ! // Almost identical to xterm mouse mode, except the values are decimal ! // instead of bytes. // // \033[<%d;%d;%dM // ^-- row *************** *** 2263,2270 **** mouse_row = getdigits(&p) - 1; ! // The modifiers were the mouse coordinates, not the ! // modifier keys (alt/shift/ctrl/meta) state. *modifiers = 0; } --- 2262,2269 ---- mouse_row = getdigits(&p) - 1; ! // The modifiers were the mouse coordinates, not the modifier keys ! // (alt/shift/ctrl/meta) state. *modifiers = 0; } *************** *** 2272,2278 **** --- 2271,2281 ---- || key_name[0] == KS_SGR_MOUSE_RELEASE) { if (key_name[0] == KS_SGR_MOUSE_RELEASE) + { is_release = TRUE; + // This is used below to set held_button. + mouse_code |= MOUSE_RELEASE; + } } else { *************** *** 2293,2299 **** { # if !defined(MSWIN) /* ! * Handle mouse events. * Recognize the xterm mouse wheel, but not in the GUI, the * Linux console with GPM and the MS-DOS or Win32 console * (multi-clicks use >= 0x60). --- 2296,2302 ---- { # if !defined(MSWIN) /* ! * Handle old style mouse events. * Recognize the xterm mouse wheel, but not in the GUI, the * Linux console with GPM and the MS-DOS or Win32 console * (multi-clicks use >= 0x60). *************** *** 2384,2391 **** * (L-x) Left button pressed - not pressed x not reporting * (M-x) Middle button pressed - not pressed x not reporting * (R-x) Right button pressed - not pressed x not reporting ! * (SDmdu) Single , Double click, m mouse move d button down ! * u button up * ### X cursor position padded to 3 digits * ### Y cursor position padded to 3 digits * (s-x) SHIFT key pressed - not pressed x not reporting --- 2387,2394 ---- * (L-x) Left button pressed - not pressed x not reporting * (M-x) Middle button pressed - not pressed x not reporting * (R-x) Right button pressed - not pressed x not reporting ! * (SDmdu) Single , Double click, m: mouse move, d: button down, ! * u: button up * ### X cursor position padded to 3 digits * ### Y cursor position padded to 3 digits * (s-x) SHIFT key pressed - not pressed x not reporting *************** *** 2516,2525 **** * Pp is the third coordinate (page number) * Pe, the event code indicates what event caused this report * The following event codes are defined: ! * 0 - request, the terminal received an explicit request ! * for a locator report, but the locator is unavailable ! * 1 - request, the terminal received an explicit request ! * for a locator report * 2 - left button down * 3 - left button up * 4 - middle button down --- 2519,2528 ---- * Pp is the third coordinate (page number) * Pe, the event code indicates what event caused this report * The following event codes are defined: ! * 0 - request, the terminal received an explicit request for a ! * locator report, but the locator is unavailable ! * 1 - request, the terminal received an explicit request for a ! * locator report * 2 - left button down * 3 - left button up * 4 - middle button down *************** *** 2529,2556 **** * 8 - fourth button down * 9 - fourth button up * 10 - locator outside filter rectangle ! * Pb, the button code, ASCII decimal 0-15 indicating which ! * buttons are down if any. The state of the four buttons ! * on the locator correspond to the low four bits of the ! * decimal value, ! * "1" means button depressed * 0 - no buttons down, * 1 - right, * 2 - middle, * 4 - left, * 8 - fourth * Pr is the row coordinate of the locator position in the page, ! * encoded as an ASCII decimal value. ! * If Pr is omitted, the locator position is undefined ! * (outside the terminal window for example). ! * Pc is the column coordinate of the locator position in the ! * page, encoded as an ASCII decimal value. ! * If Pc is omitted, the locator position is undefined ! * (outside the terminal window for example). ! * Pp is the page coordinate of the locator position ! * encoded as an ASCII decimal value. ! * The page coordinate may be omitted if the locator is on ! * page one (the default). We ignore it anyway. */ int Pe, Pb, Pr, Pc; --- 2532,2555 ---- * 8 - fourth button down * 9 - fourth button up * 10 - locator outside filter rectangle ! * Pb, the button code, ASCII decimal 0-15 indicating which buttons are ! * down if any. The state of the four buttons on the locator ! * correspond to the low four bits of the decimal value, "1" means ! * button depressed * 0 - no buttons down, * 1 - right, * 2 - middle, * 4 - left, * 8 - fourth * Pr is the row coordinate of the locator position in the page, ! * encoded as an ASCII decimal value. If Pr is omitted, the locator ! * position is undefined (outside the terminal window for example). ! * Pc is the column coordinate of the locator position in the page, ! * encoded as an ASCII decimal value. If Pc is omitted, the locator ! * position is undefined (outside the terminal window for example). ! * Pp is the page coordinate of the locator position encoded as an ! * ASCII decimal value. The page coordinate may be omitted if the ! * locator is on page one (the default). We ignore it anyway. */ int Pe, Pb, Pr, Pc; *************** *** 2707,2718 **** ) { /* ! * If we get a mouse drag or release event when ! * there is no mouse button held down (held_button == ! * MOUSE_RELEASE), produce a K_IGNORE below. ! * (can happen when you hold down two buttons ! * and then let them go, or click in the menu bar, but not ! * on a menu, and drag into the text). */ if ((mouse_code & MOUSE_DRAG) == MOUSE_DRAG) is_drag = TRUE; --- 2706,2716 ---- ) { /* ! * If we get a mouse drag or release event when there is no mouse ! * button held down (held_button == MOUSE_RELEASE), produce a K_IGNORE ! * below. ! * (can happen when you hold down two buttons and then let them go, or ! * click in the menu bar, but not on a menu, and drag into the text). */ if ((mouse_code & MOUSE_DRAG) == MOUSE_DRAG) is_drag = TRUE; *************** *** 2723,2730 **** # ifdef CHECK_DOUBLE_CLICK # ifdef FEAT_MOUSE_GPM /* ! * Only for Unix, when GUI not active, we handle ! * multi-clicks here, but not for GPM mouse events. */ # ifdef FEAT_GUI if (key_name[0] != KS_GPM_MOUSE && !gui.in_use) --- 2721,2728 ---- # ifdef CHECK_DOUBLE_CLICK # ifdef FEAT_MOUSE_GPM /* ! * Only for Unix, when GUI not active, we handle multi-clicks here, but ! * not for GPM mouse events. */ # ifdef FEAT_GUI if (key_name[0] != KS_GPM_MOUSE && !gui.in_use) *************** *** 2801,2808 **** else if (orig_num_clicks == 4) *modifiers |= MOD_MASK_4CLICK; ! // Work out our pseudo mouse event. Note that MOUSE_RELEASE gets ! // added, then it's not mouse up/down. key_name[0] = KS_EXTRA; if (wheel_code != 0 && (!is_release || release_is_ambiguous)) { --- 2799,2806 ---- else if (orig_num_clicks == 4) *modifiers |= MOD_MASK_4CLICK; ! // Work out our pseudo mouse event. Note that MOUSE_RELEASE gets added, ! // then it's not mouse up/down. key_name[0] = KS_EXTRA; if (wheel_code != 0 && (!is_release || release_is_ambiguous)) { *************** *** 2823,2833 **** held_button = MOUSE_RELEASE; } else ! key_name[1] = get_pseudo_mouse_code(current_button, ! is_click, is_drag); ! // Make sure the mouse position is valid. Some terminals may ! // return weird values. if (mouse_col >= Columns) mouse_col = Columns - 1; if (mouse_row >= Rows) --- 2821,2831 ---- held_button = MOUSE_RELEASE; } else ! key_name[1] = get_pseudo_mouse_code(current_button, is_click, is_drag); ! ! // Make sure the mouse position is valid. Some terminals may return weird ! // values. if (mouse_col >= Columns) mouse_col = Columns - 1; if (mouse_row >= Rows) *** ../vim-8.2.1185/src/version.c 2020-07-11 22:49:56.047213793 +0200 --- src/version.c 2020-07-12 13:39:27.981501410 +0200 *************** *** 756,757 **** --- 756,759 ---- { /* Add new patch number below this line */ + /**/ + 1186, /**/ -- The Feynman problem solving Algorithm: 1) Write down the problem 2) Think real hard 3) Write down the answer /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///