diff options
author | zeertzjq <zeertzjq@outlook.com> | 2022-09-24 22:28:41 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-24 22:28:41 +0800 |
commit | 8317b9199edc6936fec829f4908f9c74dc874ce4 (patch) | |
tree | 4b9976d636262a6a6d159f616c300ab2386b7f4f /src | |
parent | dfc6c973a34b1d16d6e1ae135aff587366aeb083 (diff) | |
download | rneovim-8317b9199edc6936fec829f4908f9c74dc874ce4.tar.gz rneovim-8317b9199edc6936fec829f4908f9c74dc874ce4.tar.bz2 rneovim-8317b9199edc6936fec829f4908f9c74dc874ce4.zip |
fix(input): use click number of last click for mouse drag (#20300)
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/os/input.c | 48 |
1 files changed, 23 insertions, 25 deletions
diff --git a/src/nvim/os/input.c b/src/nvim/os/input.c index fc7390a303..cb0dba8cac 100644 --- a/src/nvim/os/input.c +++ b/src/nvim/os/input.c @@ -306,37 +306,35 @@ static uint8_t check_multiclick(int code, int grid, int row, int col) static int orig_mouse_row = 0; static uint64_t orig_mouse_time = 0; // time of previous mouse click - if (code == KE_LEFTRELEASE - || code == KE_RIGHTRELEASE - || code == KE_MIDDLERELEASE - || code == KE_MOUSEDOWN - || code == KE_MOUSEUP - || code == KE_MOUSELEFT - || code == KE_MOUSERIGHT - || code == KE_MOUSEMOVE) { + if ((code >= KE_MOUSEDOWN && code <= KE_MOUSERIGHT) || code == KE_MOUSEMOVE) { return 0; } - uint64_t mouse_time = os_hrtime(); // time of current mouse click (ns) - - // compute the time elapsed since the previous mouse click and - // convert p_mouse from ms to ns - uint64_t timediff = mouse_time - orig_mouse_time; - uint64_t mouset = (uint64_t)p_mouset * 1000000; - if (code == orig_mouse_code - && timediff < mouset - && orig_num_clicks != 4 - && orig_mouse_grid == grid - && orig_mouse_col == col - && orig_mouse_row == row) { - orig_num_clicks++; - } else { - orig_num_clicks = 1; + + // For click events the number of clicks is updated. + if (code == KE_LEFTMOUSE || code == KE_RIGHTMOUSE || code == KE_MIDDLEMOUSE) { + uint64_t mouse_time = os_hrtime(); // time of current mouse click (ns) + // compute the time elapsed since the previous mouse click and + // convert p_mouse from ms to ns + uint64_t timediff = mouse_time - orig_mouse_time; + uint64_t mouset = (uint64_t)p_mouset * 1000000; + if (code == orig_mouse_code + && timediff < mouset + && orig_num_clicks != 4 + && orig_mouse_grid == grid + && orig_mouse_col == col + && orig_mouse_row == row) { + orig_num_clicks++; + } else { + orig_num_clicks = 1; + } + orig_mouse_code = code; + orig_mouse_time = mouse_time; } - orig_mouse_code = code; + // For drag and release events the number of clicks is kept. + orig_mouse_grid = grid; orig_mouse_col = col; orig_mouse_row = row; - orig_mouse_time = mouse_time; uint8_t modifiers = 0; if (orig_num_clicks == 2) { |