vim-patch:8.0.1138: click in window toolbar starts Visual mode

Problem:    Click in window toolbar starts Visual mode.
Solution:   Add the MOUSE_WINBAR flag.
eb163d73b1
This commit is contained in:
Jan Edmund Lazo
2020-03-14 09:13:17 -04:00
parent 7d028f0765
commit 355dffdd76
3 changed files with 16 additions and 2 deletions

View File

@@ -60,6 +60,7 @@ int jump_to_mouse(int flags,
{ {
static int on_status_line = 0; // #lines below bottom of window static int on_status_line = 0; // #lines below bottom of window
static int on_sep_line = 0; // on separator right of window static int on_sep_line = 0; // on separator right of window
static bool in_winbar = false;
static int prev_row = -1; static int prev_row = -1;
static int prev_col = -1; static int prev_col = -1;
static win_T *dragwin = NULL; // window being dragged static win_T *dragwin = NULL; // window being dragged
@@ -139,8 +140,10 @@ retnomove:
// A click in the window toolbar does not enter another window or // A click in the window toolbar does not enter another window or
// change Visual highlighting. // change Visual highlighting.
winbar_click(wp, col); winbar_click(wp, col);
return IN_OTHER_WIN; in_winbar = true;
return IN_OTHER_WIN | MOUSE_WINBAR;
} }
in_winbar = false;
// winpos and height may change in win_enter()! // winpos and height may change in win_enter()!
if (grid == DEFAULT_GRID_HANDLE && row >= wp->w_height) { if (grid == DEFAULT_GRID_HANDLE && row >= wp->w_height) {
@@ -231,6 +234,9 @@ retnomove:
did_drag |= count; did_drag |= count;
} }
return IN_SEP_LINE; // Cursor didn't move return IN_SEP_LINE; // Cursor didn't move
} else if (in_winbar) {
// After a click on the window toolbar don't start Visual mode.
return IN_OTHER_WIN | MOUSE_WINBAR;
} else { } else {
// keep_window_focus must be true // keep_window_focus must be true
// before moving the cursor for a left click, stop Visual mode // before moving the cursor for a left click, stop Visual mode

View File

@@ -16,6 +16,7 @@
#define CURSOR_MOVED 0x100 #define CURSOR_MOVED 0x100
#define MOUSE_FOLD_CLOSE 0x200 // clicked on '-' in fold column #define MOUSE_FOLD_CLOSE 0x200 // clicked on '-' in fold column
#define MOUSE_FOLD_OPEN 0x400 // clicked on '+' in fold column #define MOUSE_FOLD_OPEN 0x400 // clicked on '+' in fold column
#define MOUSE_WINBAR 0x800 // in window toolbar
// flags for jump_to_mouse() // flags for jump_to_mouse()
#define MOUSE_FOCUS 0x01 // need to stay in this window #define MOUSE_FOCUS 0x01 // need to stay in this window

View File

@@ -2559,7 +2559,14 @@ do_mouse (
* JUMP! * JUMP!
*/ */
jump_flags = jump_to_mouse(jump_flags, jump_flags = jump_to_mouse(jump_flags,
oap == NULL ? NULL : &(oap->inclusive), which_button); oap == NULL ? NULL : &(oap->inclusive),
which_button);
// A click in the window toolbar has no side effects.
if (jump_flags & MOUSE_WINBAR) {
return false;
}
moved = (jump_flags & CURSOR_MOVED); moved = (jump_flags & CURSOR_MOVED);
in_status_line = (jump_flags & IN_STATUS_LINE); in_status_line = (jump_flags & IN_STATUS_LINE);
in_sep_line = (jump_flags & IN_SEP_LINE); in_sep_line = (jump_flags & IN_SEP_LINE);