Mercurial > vim
annotate src/mouse.c @ 34641:b41af4b613da v9.1.0206
patch 9.1.0206: unused display_text_first boolean var in win_line()
Commit: https://github.com/vim/vim/commit/c8b47f26d8ae0db2d65a1cd34d7e34a2c7a6b462
Author: Dylan Thacker-Smith <dylan.ah.smith@gmail.com>
Date: Tue Mar 26 18:05:01 2024 +0100
patch 9.1.0206: unused display_text_first boolean var in win_line()
Problem: unused display_text_first boolean var in win_line()
Solution: Remove unused display_text_first boolean variable
(Dylan Thacker-Smith)
The only place it is used, uses its initial constant value, then the
following conditionally values set to the variable are unused.
Specifically, it was commit 234c3fab28c14846b962c90097496b27ee1b4df8
that changed the use of display_text_first such that it doesn't have any
effect.
closes: #14305
Signed-off-by: Dylan Thacker-Smith <dylan.ah.smith@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Tue, 26 Mar 2024 18:15:05 +0100 |
parents | fdd232ab72ea |
children | ca2da8e8fb53 |
rev | line source |
---|---|
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1 /* vi:set ts=8 sts=4 sw=4 noet: |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2 * |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3 * VIM - Vi IMproved by Bram Moolenaar |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
4 * |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
5 * Do ":help uganda" in Vim to read copying and usage conditions. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
6 * Do ":help credits" in Vim to see a list of people who contributed. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
7 * See README.txt for an overview of the Vim source code. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
8 */ |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
9 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
10 /* |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
11 * mouse.c: mouse handling functions |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
12 */ |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
13 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
14 #include "vim.h" |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
15 |
28755
26a2836923d6
patch 8.2.4902: mouse wheel scrolling is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
28558
diff
changeset
|
16 /* |
26a2836923d6
patch 8.2.4902: mouse wheel scrolling is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
28558
diff
changeset
|
17 * Horiziontal and vertical steps used when scrolling. |
26a2836923d6
patch 8.2.4902: mouse wheel scrolling is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
28558
diff
changeset
|
18 * When negative scroll by a whole page. |
26a2836923d6
patch 8.2.4902: mouse wheel scrolling is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
28558
diff
changeset
|
19 */ |
26a2836923d6
patch 8.2.4902: mouse wheel scrolling is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
28558
diff
changeset
|
20 static long mouse_hor_step = 6; |
26a2836923d6
patch 8.2.4902: mouse wheel scrolling is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
28558
diff
changeset
|
21 static long mouse_vert_step = 3; |
26a2836923d6
patch 8.2.4902: mouse wheel scrolling is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
28558
diff
changeset
|
22 |
26a2836923d6
patch 8.2.4902: mouse wheel scrolling is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
28558
diff
changeset
|
23 void |
26a2836923d6
patch 8.2.4902: mouse wheel scrolling is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
28558
diff
changeset
|
24 mouse_set_vert_scroll_step(long step) |
26a2836923d6
patch 8.2.4902: mouse wheel scrolling is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
28558
diff
changeset
|
25 { |
26a2836923d6
patch 8.2.4902: mouse wheel scrolling is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
28558
diff
changeset
|
26 mouse_vert_step = step; |
26a2836923d6
patch 8.2.4902: mouse wheel scrolling is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
28558
diff
changeset
|
27 } |
26a2836923d6
patch 8.2.4902: mouse wheel scrolling is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
28558
diff
changeset
|
28 |
26a2836923d6
patch 8.2.4902: mouse wheel scrolling is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
28558
diff
changeset
|
29 void |
26a2836923d6
patch 8.2.4902: mouse wheel scrolling is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
28558
diff
changeset
|
30 mouse_set_hor_scroll_step(long step) |
26a2836923d6
patch 8.2.4902: mouse wheel scrolling is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
28558
diff
changeset
|
31 { |
26a2836923d6
patch 8.2.4902: mouse wheel scrolling is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
28558
diff
changeset
|
32 mouse_hor_step = step; |
26a2836923d6
patch 8.2.4902: mouse wheel scrolling is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
28558
diff
changeset
|
33 } |
26a2836923d6
patch 8.2.4902: mouse wheel scrolling is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
28558
diff
changeset
|
34 |
18691
fb07fe556e67
patch 8.1.2337: double-click time sometimes miscomputed
Bram Moolenaar <Bram@vim.org>
parents:
18658
diff
changeset
|
35 #ifdef CHECK_DOUBLE_CLICK |
fb07fe556e67
patch 8.1.2337: double-click time sometimes miscomputed
Bram Moolenaar <Bram@vim.org>
parents:
18658
diff
changeset
|
36 /* |
fb07fe556e67
patch 8.1.2337: double-click time sometimes miscomputed
Bram Moolenaar <Bram@vim.org>
parents:
18658
diff
changeset
|
37 * Return the duration from t1 to t2 in milliseconds. |
fb07fe556e67
patch 8.1.2337: double-click time sometimes miscomputed
Bram Moolenaar <Bram@vim.org>
parents:
18658
diff
changeset
|
38 */ |
fb07fe556e67
patch 8.1.2337: double-click time sometimes miscomputed
Bram Moolenaar <Bram@vim.org>
parents:
18658
diff
changeset
|
39 static long |
fb07fe556e67
patch 8.1.2337: double-click time sometimes miscomputed
Bram Moolenaar <Bram@vim.org>
parents:
18658
diff
changeset
|
40 time_diff_ms(struct timeval *t1, struct timeval *t2) |
fb07fe556e67
patch 8.1.2337: double-click time sometimes miscomputed
Bram Moolenaar <Bram@vim.org>
parents:
18658
diff
changeset
|
41 { |
fb07fe556e67
patch 8.1.2337: double-click time sometimes miscomputed
Bram Moolenaar <Bram@vim.org>
parents:
18658
diff
changeset
|
42 // This handles wrapping of tv_usec correctly without any special case. |
fb07fe556e67
patch 8.1.2337: double-click time sometimes miscomputed
Bram Moolenaar <Bram@vim.org>
parents:
18658
diff
changeset
|
43 // Example of 2 pairs (tv_sec, tv_usec) with a duration of 5 ms: |
fb07fe556e67
patch 8.1.2337: double-click time sometimes miscomputed
Bram Moolenaar <Bram@vim.org>
parents:
18658
diff
changeset
|
44 // t1 = (1, 998000) t2 = (2, 3000) gives: |
fb07fe556e67
patch 8.1.2337: double-click time sometimes miscomputed
Bram Moolenaar <Bram@vim.org>
parents:
18658
diff
changeset
|
45 // (2 - 1) * 1000 + (3000 - 998000) / 1000 -> 5 ms. |
fb07fe556e67
patch 8.1.2337: double-click time sometimes miscomputed
Bram Moolenaar <Bram@vim.org>
parents:
18658
diff
changeset
|
46 return (t2->tv_sec - t1->tv_sec) * 1000 |
fb07fe556e67
patch 8.1.2337: double-click time sometimes miscomputed
Bram Moolenaar <Bram@vim.org>
parents:
18658
diff
changeset
|
47 + (t2->tv_usec - t1->tv_usec) / 1000; |
fb07fe556e67
patch 8.1.2337: double-click time sometimes miscomputed
Bram Moolenaar <Bram@vim.org>
parents:
18658
diff
changeset
|
48 } |
fb07fe556e67
patch 8.1.2337: double-click time sometimes miscomputed
Bram Moolenaar <Bram@vim.org>
parents:
18658
diff
changeset
|
49 #endif |
fb07fe556e67
patch 8.1.2337: double-click time sometimes miscomputed
Bram Moolenaar <Bram@vim.org>
parents:
18658
diff
changeset
|
50 |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
51 /* |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
52 * Get class of a character for selection: same class means same word. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
53 * 0: blank |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
54 * 1: punctuation groups |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
55 * 2: normal word character |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
56 * >2: multi-byte word character. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
57 */ |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
58 static int |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
59 get_mouse_class(char_u *p) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
60 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
61 int c; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
62 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
63 if (has_mbyte && MB_BYTE2LEN(p[0]) > 1) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
64 return mb_get_class(p); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
65 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
66 c = *p; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
67 if (c == ' ' || c == '\t') |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
68 return 0; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
69 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
70 if (vim_iswordc(c)) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
71 return 2; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
72 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
73 // There are a few special cases where we want certain combinations of |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
74 // characters to be considered as a single word. These are things like |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
75 // "->", "/ *", "*=", "+=", "&=", "<=", ">=", "!=" etc. Otherwise, each |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
76 // character is in its own class. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
77 if (c != NUL && vim_strchr((char_u *)"-+*/%<>&|^!=", c) != NULL) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
78 return 1; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
79 return c; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
80 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
81 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
82 /* |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
83 * Move "pos" back to the start of the word it's in. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
84 */ |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
85 static void |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
86 find_start_of_word(pos_T *pos) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
87 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
88 char_u *line; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
89 int cclass; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
90 int col; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
91 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
92 line = ml_get(pos->lnum); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
93 cclass = get_mouse_class(line + pos->col); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
94 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
95 while (pos->col > 0) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
96 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
97 col = pos->col - 1; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
98 col -= (*mb_head_off)(line, line + col); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
99 if (get_mouse_class(line + col) != cclass) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
100 break; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
101 pos->col = col; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
102 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
103 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
104 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
105 /* |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
106 * Move "pos" forward to the end of the word it's in. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
107 * When 'selection' is "exclusive", the position is just after the word. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
108 */ |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
109 static void |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
110 find_end_of_word(pos_T *pos) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
111 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
112 char_u *line; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
113 int cclass; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
114 int col; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
115 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
116 line = ml_get(pos->lnum); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
117 if (*p_sel == 'e' && pos->col > 0) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
118 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
119 --pos->col; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
120 pos->col -= (*mb_head_off)(line, line + pos->col); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
121 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
122 cclass = get_mouse_class(line + pos->col); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
123 while (line[pos->col] != NUL) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
124 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
125 col = pos->col + (*mb_ptr2len)(line + pos->col); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
126 if (get_mouse_class(line + col) != cclass) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
127 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
128 if (*p_sel == 'e') |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
129 pos->col = col; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
130 break; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
131 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
132 pos->col = col; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
133 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
134 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
135 |
18141
2cc67e54edf8
patch 8.1.2065: compiler warning building non-GUI with MinGW.
Bram Moolenaar <Bram@vim.org>
parents:
18135
diff
changeset
|
136 #if defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_GTK) \ |
28303
9849df834f1d
patch 8.2.4677: the Athena GUI support is outdated
Bram Moolenaar <Bram@vim.org>
parents:
28087
diff
changeset
|
137 || defined(FEAT_GUI_MSWIN) \ |
21745
35921b7fc07a
patch 8.2.1422: the Mac GUI implementation is outdated
Bram Moolenaar <Bram@vim.org>
parents:
21339
diff
changeset
|
138 || defined(FEAT_GUI_PHOTON) \ |
18141
2cc67e54edf8
patch 8.1.2065: compiler warning building non-GUI with MinGW.
Bram Moolenaar <Bram@vim.org>
parents:
18135
diff
changeset
|
139 || defined(FEAT_TERM_POPUP_MENU) |
2cc67e54edf8
patch 8.1.2065: compiler warning building non-GUI with MinGW.
Bram Moolenaar <Bram@vim.org>
parents:
18135
diff
changeset
|
140 # define USE_POPUP_SETPOS |
2cc67e54edf8
patch 8.1.2065: compiler warning building non-GUI with MinGW.
Bram Moolenaar <Bram@vim.org>
parents:
18135
diff
changeset
|
141 # define NEED_VCOL2COL |
2cc67e54edf8
patch 8.1.2065: compiler warning building non-GUI with MinGW.
Bram Moolenaar <Bram@vim.org>
parents:
18135
diff
changeset
|
142 |
2cc67e54edf8
patch 8.1.2065: compiler warning building non-GUI with MinGW.
Bram Moolenaar <Bram@vim.org>
parents:
18135
diff
changeset
|
143 /* |
30809
ffdb7a6785af
patch 9.0.0739: mouse column not correctly used for popup_setpos
Bram Moolenaar <Bram@vim.org>
parents:
30645
diff
changeset
|
144 * Translate window coordinates to buffer position without any side effects. |
ffdb7a6785af
patch 9.0.0739: mouse column not correctly used for popup_setpos
Bram Moolenaar <Bram@vim.org>
parents:
30645
diff
changeset
|
145 * Returns IN_BUFFER and sets "mpos->col" to the column when in buffer text. |
ffdb7a6785af
patch 9.0.0739: mouse column not correctly used for popup_setpos
Bram Moolenaar <Bram@vim.org>
parents:
30645
diff
changeset
|
146 * The column is one for the first column. |
18141
2cc67e54edf8
patch 8.1.2065: compiler warning building non-GUI with MinGW.
Bram Moolenaar <Bram@vim.org>
parents:
18135
diff
changeset
|
147 */ |
2cc67e54edf8
patch 8.1.2065: compiler warning building non-GUI with MinGW.
Bram Moolenaar <Bram@vim.org>
parents:
18135
diff
changeset
|
148 static int |
2cc67e54edf8
patch 8.1.2065: compiler warning building non-GUI with MinGW.
Bram Moolenaar <Bram@vim.org>
parents:
18135
diff
changeset
|
149 get_fpos_of_mouse(pos_T *mpos) |
2cc67e54edf8
patch 8.1.2065: compiler warning building non-GUI with MinGW.
Bram Moolenaar <Bram@vim.org>
parents:
18135
diff
changeset
|
150 { |
2cc67e54edf8
patch 8.1.2065: compiler warning building non-GUI with MinGW.
Bram Moolenaar <Bram@vim.org>
parents:
18135
diff
changeset
|
151 win_T *wp; |
2cc67e54edf8
patch 8.1.2065: compiler warning building non-GUI with MinGW.
Bram Moolenaar <Bram@vim.org>
parents:
18135
diff
changeset
|
152 int row = mouse_row; |
2cc67e54edf8
patch 8.1.2065: compiler warning building non-GUI with MinGW.
Bram Moolenaar <Bram@vim.org>
parents:
18135
diff
changeset
|
153 int col = mouse_col; |
2cc67e54edf8
patch 8.1.2065: compiler warning building non-GUI with MinGW.
Bram Moolenaar <Bram@vim.org>
parents:
18135
diff
changeset
|
154 |
2cc67e54edf8
patch 8.1.2065: compiler warning building non-GUI with MinGW.
Bram Moolenaar <Bram@vim.org>
parents:
18135
diff
changeset
|
155 if (row < 0 || col < 0) // check if it makes sense |
2cc67e54edf8
patch 8.1.2065: compiler warning building non-GUI with MinGW.
Bram Moolenaar <Bram@vim.org>
parents:
18135
diff
changeset
|
156 return IN_UNKNOWN; |
2cc67e54edf8
patch 8.1.2065: compiler warning building non-GUI with MinGW.
Bram Moolenaar <Bram@vim.org>
parents:
18135
diff
changeset
|
157 |
2cc67e54edf8
patch 8.1.2065: compiler warning building non-GUI with MinGW.
Bram Moolenaar <Bram@vim.org>
parents:
18135
diff
changeset
|
158 // find the window where the row is in |
2cc67e54edf8
patch 8.1.2065: compiler warning building non-GUI with MinGW.
Bram Moolenaar <Bram@vim.org>
parents:
18135
diff
changeset
|
159 wp = mouse_find_win(&row, &col, FAIL_POPUP); |
2cc67e54edf8
patch 8.1.2065: compiler warning building non-GUI with MinGW.
Bram Moolenaar <Bram@vim.org>
parents:
18135
diff
changeset
|
160 if (wp == NULL) |
2cc67e54edf8
patch 8.1.2065: compiler warning building non-GUI with MinGW.
Bram Moolenaar <Bram@vim.org>
parents:
18135
diff
changeset
|
161 return IN_UNKNOWN; |
2cc67e54edf8
patch 8.1.2065: compiler warning building non-GUI with MinGW.
Bram Moolenaar <Bram@vim.org>
parents:
18135
diff
changeset
|
162 // winpos and height may change in win_enter()! |
2cc67e54edf8
patch 8.1.2065: compiler warning building non-GUI with MinGW.
Bram Moolenaar <Bram@vim.org>
parents:
18135
diff
changeset
|
163 if (row >= wp->w_height) // In (or below) status line |
2cc67e54edf8
patch 8.1.2065: compiler warning building non-GUI with MinGW.
Bram Moolenaar <Bram@vim.org>
parents:
18135
diff
changeset
|
164 return IN_STATUS_LINE; |
2cc67e54edf8
patch 8.1.2065: compiler warning building non-GUI with MinGW.
Bram Moolenaar <Bram@vim.org>
parents:
18135
diff
changeset
|
165 if (col >= wp->w_width) // In vertical separator line |
2cc67e54edf8
patch 8.1.2065: compiler warning building non-GUI with MinGW.
Bram Moolenaar <Bram@vim.org>
parents:
18135
diff
changeset
|
166 return IN_SEP_LINE; |
2cc67e54edf8
patch 8.1.2065: compiler warning building non-GUI with MinGW.
Bram Moolenaar <Bram@vim.org>
parents:
18135
diff
changeset
|
167 |
2cc67e54edf8
patch 8.1.2065: compiler warning building non-GUI with MinGW.
Bram Moolenaar <Bram@vim.org>
parents:
18135
diff
changeset
|
168 if (wp != curwin) |
2cc67e54edf8
patch 8.1.2065: compiler warning building non-GUI with MinGW.
Bram Moolenaar <Bram@vim.org>
parents:
18135
diff
changeset
|
169 return IN_UNKNOWN; |
2cc67e54edf8
patch 8.1.2065: compiler warning building non-GUI with MinGW.
Bram Moolenaar <Bram@vim.org>
parents:
18135
diff
changeset
|
170 |
2cc67e54edf8
patch 8.1.2065: compiler warning building non-GUI with MinGW.
Bram Moolenaar <Bram@vim.org>
parents:
18135
diff
changeset
|
171 // compute the position in the buffer line from the posn on the screen |
2cc67e54edf8
patch 8.1.2065: compiler warning building non-GUI with MinGW.
Bram Moolenaar <Bram@vim.org>
parents:
18135
diff
changeset
|
172 if (mouse_comp_pos(curwin, &row, &col, &mpos->lnum, NULL)) |
2cc67e54edf8
patch 8.1.2065: compiler warning building non-GUI with MinGW.
Bram Moolenaar <Bram@vim.org>
parents:
18135
diff
changeset
|
173 return IN_STATUS_LINE; // past bottom |
2cc67e54edf8
patch 8.1.2065: compiler warning building non-GUI with MinGW.
Bram Moolenaar <Bram@vim.org>
parents:
18135
diff
changeset
|
174 |
33575
8fc442c731ca
patch 9.0.2032: cannot get mouse click pos for tab or virt text
Christian Brabandt <cb@256bit.org>
parents:
33549
diff
changeset
|
175 mpos->col = vcol2col(wp, mpos->lnum, col, &mpos->coladd); |
18141
2cc67e54edf8
patch 8.1.2065: compiler warning building non-GUI with MinGW.
Bram Moolenaar <Bram@vim.org>
parents:
18135
diff
changeset
|
176 return IN_BUFFER; |
2cc67e54edf8
patch 8.1.2065: compiler warning building non-GUI with MinGW.
Bram Moolenaar <Bram@vim.org>
parents:
18135
diff
changeset
|
177 } |
2cc67e54edf8
patch 8.1.2065: compiler warning building non-GUI with MinGW.
Bram Moolenaar <Bram@vim.org>
parents:
18135
diff
changeset
|
178 #endif |
2cc67e54edf8
patch 8.1.2065: compiler warning building non-GUI with MinGW.
Bram Moolenaar <Bram@vim.org>
parents:
18135
diff
changeset
|
179 |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
180 /* |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
181 * Do the appropriate action for the current mouse click in the current mode. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
182 * Not used for Command-line mode. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
183 * |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
184 * Normal and Visual Mode: |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
185 * event modi- position visual change action |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
186 * fier cursor window |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
187 * left press - yes end yes |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
188 * left press C yes end yes "^]" (2) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
189 * left press S yes end (popup: extend) yes "*" (2) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
190 * left drag - yes start if moved no |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
191 * left relse - yes start if moved no |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
192 * middle press - yes if not active no put register |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
193 * middle press - yes if active no yank and put |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
194 * right press - yes start or extend yes |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
195 * right press S yes no change yes "#" (2) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
196 * right drag - yes extend no |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
197 * right relse - yes extend no |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
198 * |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
199 * Insert or Replace Mode: |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
200 * event modi- position visual change action |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
201 * fier cursor window |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
202 * left press - yes (cannot be active) yes |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
203 * left press C yes (cannot be active) yes "CTRL-O^]" (2) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
204 * left press S yes (cannot be active) yes "CTRL-O*" (2) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
205 * left drag - yes start or extend (1) no CTRL-O (1) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
206 * left relse - yes start or extend (1) no CTRL-O (1) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
207 * middle press - no (cannot be active) no put register |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
208 * right press - yes start or extend yes CTRL-O |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
209 * right press S yes (cannot be active) yes "CTRL-O#" (2) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
210 * |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
211 * (1) only if mouse pointer moved since press |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
212 * (2) only if click is in same buffer |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
213 * |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
214 * Return TRUE if start_arrow() should be called for edit mode. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
215 */ |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
216 int |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
217 do_mouse( |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
218 oparg_T *oap, // operator argument, can be NULL |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
219 int c, // K_LEFTMOUSE, etc |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
220 int dir, // Direction to 'put' if necessary |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
221 long count, |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
222 int fixindent) // PUT_FIXINDENT if fixing indent necessary |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
223 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
224 static int do_always = FALSE; // ignore 'mouse' setting next time |
30980
eb51299c4bfc
patch 9.0.0825: cannot drag an entry in the tabpage line
Bram Moolenaar <Bram@vim.org>
parents:
30974
diff
changeset
|
225 static int got_click = FALSE; // got a click some time back |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
226 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
227 int which_button; // MOUSE_LEFT, _MIDDLE or _RIGHT |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
228 int is_click = FALSE; // If FALSE it's a drag or release event |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
229 int is_drag = FALSE; // If TRUE it's a drag event |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
230 int jump_flags = 0; // flags for jump_to_mouse() |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
231 pos_T start_visual; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
232 int moved; // Has cursor moved? |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
233 int in_status_line; // mouse in status line |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
234 static int in_tab_line = FALSE; // mouse clicked in tab line |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
235 int in_sep_line; // mouse in vertical separator line |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
236 int c1, c2; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
237 #if defined(FEAT_FOLDING) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
238 pos_T save_cursor; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
239 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
240 win_T *old_curwin = curwin; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
241 static pos_T orig_cursor; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
242 colnr_T leftcol, rightcol; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
243 pos_T end_visual; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
244 int diff; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
245 int old_active = VIsual_active; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
246 int old_mode = VIsual_mode; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
247 int regname; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
248 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
249 #if defined(FEAT_FOLDING) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
250 save_cursor = curwin->w_cursor; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
251 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
252 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
253 // When GUI is active, always recognize mouse events, otherwise: |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
254 // - Ignore mouse event in normal mode if 'mouse' doesn't include 'n'. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
255 // - Ignore mouse event in visual mode if 'mouse' doesn't include 'v'. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
256 // - For command line and insert mode 'mouse' is checked before calling |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
257 // do_mouse(). |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
258 if (do_always) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
259 do_always = FALSE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
260 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
261 #ifdef FEAT_GUI |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
262 if (!gui.in_use) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
263 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
264 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
265 if (VIsual_active) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
266 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
267 if (!mouse_has(MOUSE_VISUAL)) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
268 return FALSE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
269 } |
28773
d770568e6c98
patch 8.2.4911: the mode #defines are not clearly named
Bram Moolenaar <Bram@vim.org>
parents:
28755
diff
changeset
|
270 else if (State == MODE_NORMAL && !mouse_has(MOUSE_NORMAL)) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
271 return FALSE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
272 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
273 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
274 for (;;) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
275 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
276 which_button = get_mouse_button(KEY2TERMCAP1(c), &is_click, &is_drag); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
277 if (is_drag) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
278 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
279 // If the next character is the same mouse event then use that |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
280 // one. Speeds up dragging the status line. |
28333
04310f81143d
patch 8.2.4692: no test for what 8.2.4691 fixes
Bram Moolenaar <Bram@vim.org>
parents:
28303
diff
changeset
|
281 // Note: Since characters added to the stuff buffer in the code |
04310f81143d
patch 8.2.4692: no test for what 8.2.4691 fixes
Bram Moolenaar <Bram@vim.org>
parents:
28303
diff
changeset
|
282 // below need to come before the next character, do not do this |
04310f81143d
patch 8.2.4692: no test for what 8.2.4691 fixes
Bram Moolenaar <Bram@vim.org>
parents:
28303
diff
changeset
|
283 // when the current character was stuffed. |
04310f81143d
patch 8.2.4692: no test for what 8.2.4691 fixes
Bram Moolenaar <Bram@vim.org>
parents:
28303
diff
changeset
|
284 if (!KeyStuffed && vpeekc() != NUL) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
285 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
286 int nc; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
287 int save_mouse_row = mouse_row; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
288 int save_mouse_col = mouse_col; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
289 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
290 // Need to get the character, peeking doesn't get the actual |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
291 // one. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
292 nc = safe_vgetc(); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
293 if (c == nc) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
294 continue; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
295 vungetc(nc); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
296 mouse_row = save_mouse_row; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
297 mouse_col = save_mouse_col; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
298 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
299 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
300 break; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
301 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
302 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
303 if (c == K_MOUSEMOVE) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
304 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
305 // Mouse moved without a button pressed. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
306 #ifdef FEAT_BEVAL_TERM |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
307 ui_may_remove_balloon(); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
308 if (p_bevalterm) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
309 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
310 profile_setlimit(p_bdlay, &bevalexpr_due); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
311 bevalexpr_due_set = TRUE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
312 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
313 #endif |
18763
49b78d6465e5
patch 8.1.2371: FEAT_TEXT_PROP is a confusing name
Bram Moolenaar <Bram@vim.org>
parents:
18691
diff
changeset
|
314 #ifdef FEAT_PROP_POPUP |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
315 popup_handle_mouse_moved(); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
316 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
317 return FALSE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
318 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
319 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
320 #ifdef FEAT_MOUSESHAPE |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
321 // May have stopped dragging the status or separator line. The pointer is |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
322 // most likely still on the status or separator line. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
323 if (!is_drag && drag_status_line) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
324 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
325 drag_status_line = FALSE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
326 update_mouseshape(SHAPE_IDX_STATUS); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
327 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
328 if (!is_drag && drag_sep_line) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
329 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
330 drag_sep_line = FALSE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
331 update_mouseshape(SHAPE_IDX_VSEP); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
332 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
333 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
334 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
335 // Ignore drag and release events if we didn't get a click. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
336 if (is_click) |
30980
eb51299c4bfc
patch 9.0.0825: cannot drag an entry in the tabpage line
Bram Moolenaar <Bram@vim.org>
parents:
30974
diff
changeset
|
337 got_click = TRUE; |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
338 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
339 { |
30980
eb51299c4bfc
patch 9.0.0825: cannot drag an entry in the tabpage line
Bram Moolenaar <Bram@vim.org>
parents:
30974
diff
changeset
|
340 if (!got_click) // didn't get click, ignore |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
341 return FALSE; |
30980
eb51299c4bfc
patch 9.0.0825: cannot drag an entry in the tabpage line
Bram Moolenaar <Bram@vim.org>
parents:
30974
diff
changeset
|
342 if (!is_drag) // release, reset got_click |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
343 { |
30980
eb51299c4bfc
patch 9.0.0825: cannot drag an entry in the tabpage line
Bram Moolenaar <Bram@vim.org>
parents:
30974
diff
changeset
|
344 got_click = FALSE; |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
345 if (in_tab_line) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
346 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
347 in_tab_line = FALSE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
348 return FALSE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
349 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
350 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
351 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
352 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
353 // CTRL right mouse button does CTRL-T |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
354 if (is_click && (mod_mask & MOD_MASK_CTRL) && which_button == MOUSE_RIGHT) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
355 { |
28773
d770568e6c98
patch 8.2.4911: the mode #defines are not clearly named
Bram Moolenaar <Bram@vim.org>
parents:
28755
diff
changeset
|
356 if (State & MODE_INSERT) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
357 stuffcharReadbuff(Ctrl_O); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
358 if (count > 1) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
359 stuffnumReadbuff(count); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
360 stuffcharReadbuff(Ctrl_T); |
30980
eb51299c4bfc
patch 9.0.0825: cannot drag an entry in the tabpage line
Bram Moolenaar <Bram@vim.org>
parents:
30974
diff
changeset
|
361 got_click = FALSE; // ignore drag&release now |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
362 return FALSE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
363 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
364 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
365 // CTRL only works with left mouse button |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
366 if ((mod_mask & MOD_MASK_CTRL) && which_button != MOUSE_LEFT) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
367 return FALSE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
368 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
369 // When a modifier is down, ignore drag and release events, as well as |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
370 // multiple clicks and the middle mouse button. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
371 // Accept shift-leftmouse drags when 'mousemodel' is "popup.*". |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
372 if ((mod_mask & (MOD_MASK_SHIFT | MOD_MASK_CTRL | MOD_MASK_ALT |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
373 | MOD_MASK_META)) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
374 && (!is_click |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
375 || (mod_mask & MOD_MASK_MULTI_CLICK) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
376 || which_button == MOUSE_MIDDLE) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
377 && !((mod_mask & (MOD_MASK_SHIFT|MOD_MASK_ALT)) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
378 && mouse_model_popup() |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
379 && which_button == MOUSE_LEFT) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
380 && !((mod_mask & MOD_MASK_ALT) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
381 && !mouse_model_popup() |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
382 && which_button == MOUSE_RIGHT) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
383 ) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
384 return FALSE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
385 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
386 // If the button press was used as the movement command for an operator |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
387 // (eg "d<MOUSE>"), or it is the middle button that is held down, ignore |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
388 // drag/release events. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
389 if (!is_click && which_button == MOUSE_MIDDLE) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
390 return FALSE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
391 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
392 if (oap != NULL) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
393 regname = oap->regname; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
394 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
395 regname = 0; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
396 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
397 // Middle mouse button does a 'put' of the selected text |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
398 if (which_button == MOUSE_MIDDLE) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
399 { |
28773
d770568e6c98
patch 8.2.4911: the mode #defines are not clearly named
Bram Moolenaar <Bram@vim.org>
parents:
28755
diff
changeset
|
400 if (State == MODE_NORMAL) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
401 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
402 // If an operator was pending, we don't know what the user wanted |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
403 // to do. Go back to normal mode: Clear the operator and beep(). |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
404 if (oap != NULL && oap->op_type != OP_NOP) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
405 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
406 clearopbeep(oap); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
407 return FALSE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
408 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
409 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
410 // If visual was active, yank the highlighted text and put it |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
411 // before the mouse pointer position. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
412 // In Select mode replace the highlighted text with the clipboard. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
413 if (VIsual_active) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
414 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
415 if (VIsual_select) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
416 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
417 stuffcharReadbuff(Ctrl_G); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
418 stuffReadbuff((char_u *)"\"+p"); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
419 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
420 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
421 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
422 stuffcharReadbuff('y'); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
423 stuffcharReadbuff(K_MIDDLEMOUSE); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
424 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
425 do_always = TRUE; // ignore 'mouse' setting next time |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
426 return FALSE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
427 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
428 // The rest is below jump_to_mouse() |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
429 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
430 |
28773
d770568e6c98
patch 8.2.4911: the mode #defines are not clearly named
Bram Moolenaar <Bram@vim.org>
parents:
28755
diff
changeset
|
431 else if ((State & MODE_INSERT) == 0) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
432 return FALSE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
433 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
434 // Middle click in insert mode doesn't move the mouse, just insert the |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
435 // contents of a register. '.' register is special, can't insert that |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
436 // with do_put(). |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
437 // Also paste at the cursor if the current mode isn't in 'mouse' (only |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
438 // happens for the GUI). |
28773
d770568e6c98
patch 8.2.4911: the mode #defines are not clearly named
Bram Moolenaar <Bram@vim.org>
parents:
28755
diff
changeset
|
439 if ((State & MODE_INSERT) || !mouse_has(MOUSE_NORMAL)) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
440 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
441 if (regname == '.') |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
442 insert_reg(regname, TRUE); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
443 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
444 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
445 #ifdef FEAT_CLIPBOARD |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
446 if (clip_star.available && regname == 0) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
447 regname = '*'; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
448 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
449 if ((State & REPLACE_FLAG) && !yank_register_mline(regname)) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
450 insert_reg(regname, TRUE); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
451 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
452 { |
22176
6941d3205be9
patch 8.2.1637: Vim9: :put ={expr} does not work inside :def function
Bram Moolenaar <Bram@vim.org>
parents:
21745
diff
changeset
|
453 do_put(regname, NULL, BACKWARD, 1L, |
6941d3205be9
patch 8.2.1637: Vim9: :put ={expr} does not work inside :def function
Bram Moolenaar <Bram@vim.org>
parents:
21745
diff
changeset
|
454 fixindent | PUT_CURSEND); |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
455 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
456 // Repeat it with CTRL-R CTRL-O r or CTRL-R CTRL-P r |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
457 AppendCharToRedobuff(Ctrl_R); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
458 AppendCharToRedobuff(fixindent ? Ctrl_P : Ctrl_O); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
459 AppendCharToRedobuff(regname == 0 ? '"' : regname); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
460 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
461 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
462 return FALSE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
463 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
464 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
465 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
466 // When dragging or button-up stay in the same window. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
467 if (!is_click) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
468 jump_flags |= MOUSE_FOCUS | MOUSE_DID_MOVE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
469 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
470 start_visual.lnum = 0; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
471 |
29841
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
472 if (TabPageIdxs != NULL) // only when initialized |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
473 { |
29841
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
474 // Check for clicking in the tab page line. |
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
475 if (mouse_row == 0 && firstwin->w_winrow > 0) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
476 { |
29841
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
477 if (is_drag) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
478 { |
29841
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
479 if (in_tab_line) |
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
480 { |
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
481 c1 = TabPageIdxs[mouse_col]; |
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
482 tabpage_move(c1 <= 0 ? 9999 : c1 < tabpage_index(curtab) |
30645
101f08b49ed3
patch 9.0.0657: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents:
29841
diff
changeset
|
483 ? c1 - 1 : c1); |
29841
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
484 } |
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
485 return FALSE; |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
486 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
487 |
29841
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
488 // click in a tab selects that tab page |
30645
101f08b49ed3
patch 9.0.0657: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents:
29841
diff
changeset
|
489 if (is_click && cmdwin_type == 0 && mouse_col < Columns) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
490 { |
29841
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
491 in_tab_line = TRUE; |
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
492 c1 = TabPageIdxs[mouse_col]; |
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
493 if (c1 >= 0) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
494 { |
29841
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
495 if ((mod_mask & MOD_MASK_MULTI_CLICK) == MOD_MASK_2CLICK) |
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
496 { |
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
497 // double click opens new page |
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
498 end_visual_mode_keep_button(); |
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
499 tabpage_new(); |
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
500 tabpage_move(c1 == 0 ? 9999 : c1 - 1); |
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
501 } |
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
502 else |
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
503 { |
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
504 // Go to specified tab page, or next one if not clicking |
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
505 // on a label. |
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
506 goto_tabpage(c1); |
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
507 |
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
508 // It's like clicking on the status line of a window. |
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
509 if (curwin != old_curwin) |
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
510 end_visual_mode_keep_button(); |
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
511 } |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
512 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
513 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
514 { |
29841
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
515 tabpage_T *tp; |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
516 |
29841
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
517 // Close the current or specified tab page. |
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
518 if (c1 == -999) |
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
519 tp = curtab; |
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
520 else |
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
521 tp = find_tabpage(-c1); |
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
522 if (tp == curtab) |
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
523 { |
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
524 if (first_tabpage->tp_next != NULL) |
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
525 tabpage_close(FALSE); |
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
526 } |
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
527 else if (tp != NULL) |
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
528 tabpage_close_other(tp, FALSE); |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
529 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
530 } |
29841
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
531 return TRUE; |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
532 } |
29841
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
533 else if (is_drag && in_tab_line) |
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
534 { |
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
535 c1 = TabPageIdxs[mouse_col]; |
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
536 tabpage_move(c1 <= 0 ? 9999 : c1 - 1); |
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
537 return FALSE; |
b37b74ea8dee
patch 9.0.0259: crash with mouse click when not initialized
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
538 } |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
539 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
540 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
541 // When 'mousemodel' is "popup" or "popup_setpos", translate mouse events: |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
542 // right button up -> pop-up menu |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
543 // shift-left button -> right button |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
544 // alt-left button -> alt-right button |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
545 if (mouse_model_popup()) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
546 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
547 if (which_button == MOUSE_RIGHT |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
548 && !(mod_mask & (MOD_MASK_SHIFT | MOD_MASK_CTRL))) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
549 { |
18141
2cc67e54edf8
patch 8.1.2065: compiler warning building non-GUI with MinGW.
Bram Moolenaar <Bram@vim.org>
parents:
18135
diff
changeset
|
550 #ifdef USE_POPUP_SETPOS |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
551 # ifdef FEAT_GUI |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
552 if (gui.in_use) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
553 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
554 # if defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_GTK) \ |
21745
35921b7fc07a
patch 8.2.1422: the Mac GUI implementation is outdated
Bram Moolenaar <Bram@vim.org>
parents:
21339
diff
changeset
|
555 || defined(FEAT_GUI_PHOTON) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
556 if (!is_click) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
557 // Ignore right button release events, only shows the popup |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
558 // menu on the button down event. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
559 return FALSE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
560 # endif |
28303
9849df834f1d
patch 8.2.4677: the Athena GUI support is outdated
Bram Moolenaar <Bram@vim.org>
parents:
28087
diff
changeset
|
561 # if defined(FEAT_GUI_MSWIN) || defined(FEAT_GUI_HAIKU) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
562 if (is_click || is_drag) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
563 // Ignore right button down and drag mouse events. Windows |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
564 // only shows the popup menu on the button up event. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
565 return FALSE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
566 # endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
567 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
568 # endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
569 # if defined(FEAT_GUI) && defined(FEAT_TERM_POPUP_MENU) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
570 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
571 # endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
572 # if defined(FEAT_TERM_POPUP_MENU) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
573 if (!is_click) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
574 // Ignore right button release events, only shows the popup |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
575 // menu on the button down event. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
576 return FALSE; |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
577 # endif |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
578 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
579 jump_flags = 0; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
580 if (STRCMP(p_mousem, "popup_setpos") == 0) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
581 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
582 // First set the cursor position before showing the popup |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
583 // menu. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
584 if (VIsual_active) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
585 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
586 pos_T m_pos; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
587 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
588 // set MOUSE_MAY_STOP_VIS if we are outside the |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
589 // selection or the current window (might have false |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
590 // negative here) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
591 if (mouse_row < curwin->w_winrow |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
592 || mouse_row |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
593 > (curwin->w_winrow + curwin->w_height)) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
594 jump_flags = MOUSE_MAY_STOP_VIS; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
595 else if (get_fpos_of_mouse(&m_pos) != IN_BUFFER) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
596 jump_flags = MOUSE_MAY_STOP_VIS; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
597 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
598 { |
30809
ffdb7a6785af
patch 9.0.0739: mouse column not correctly used for popup_setpos
Bram Moolenaar <Bram@vim.org>
parents:
30645
diff
changeset
|
599 if (VIsual_mode == 'V') |
ffdb7a6785af
patch 9.0.0739: mouse column not correctly used for popup_setpos
Bram Moolenaar <Bram@vim.org>
parents:
30645
diff
changeset
|
600 { |
ffdb7a6785af
patch 9.0.0739: mouse column not correctly used for popup_setpos
Bram Moolenaar <Bram@vim.org>
parents:
30645
diff
changeset
|
601 if ((curwin->w_cursor.lnum <= VIsual.lnum |
ffdb7a6785af
patch 9.0.0739: mouse column not correctly used for popup_setpos
Bram Moolenaar <Bram@vim.org>
parents:
30645
diff
changeset
|
602 && (m_pos.lnum < curwin->w_cursor.lnum |
ffdb7a6785af
patch 9.0.0739: mouse column not correctly used for popup_setpos
Bram Moolenaar <Bram@vim.org>
parents:
30645
diff
changeset
|
603 || VIsual.lnum < m_pos.lnum)) |
ffdb7a6785af
patch 9.0.0739: mouse column not correctly used for popup_setpos
Bram Moolenaar <Bram@vim.org>
parents:
30645
diff
changeset
|
604 || (VIsual.lnum < curwin->w_cursor.lnum |
ffdb7a6785af
patch 9.0.0739: mouse column not correctly used for popup_setpos
Bram Moolenaar <Bram@vim.org>
parents:
30645
diff
changeset
|
605 && (m_pos.lnum < VIsual.lnum |
ffdb7a6785af
patch 9.0.0739: mouse column not correctly used for popup_setpos
Bram Moolenaar <Bram@vim.org>
parents:
30645
diff
changeset
|
606 || curwin->w_cursor.lnum < m_pos.lnum))) |
ffdb7a6785af
patch 9.0.0739: mouse column not correctly used for popup_setpos
Bram Moolenaar <Bram@vim.org>
parents:
30645
diff
changeset
|
607 { |
ffdb7a6785af
patch 9.0.0739: mouse column not correctly used for popup_setpos
Bram Moolenaar <Bram@vim.org>
parents:
30645
diff
changeset
|
608 jump_flags = MOUSE_MAY_STOP_VIS; |
ffdb7a6785af
patch 9.0.0739: mouse column not correctly used for popup_setpos
Bram Moolenaar <Bram@vim.org>
parents:
30645
diff
changeset
|
609 } |
ffdb7a6785af
patch 9.0.0739: mouse column not correctly used for popup_setpos
Bram Moolenaar <Bram@vim.org>
parents:
30645
diff
changeset
|
610 } |
ffdb7a6785af
patch 9.0.0739: mouse column not correctly used for popup_setpos
Bram Moolenaar <Bram@vim.org>
parents:
30645
diff
changeset
|
611 else if ((LTOREQ_POS(curwin->w_cursor, VIsual) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
612 && (LT_POS(m_pos, curwin->w_cursor) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
613 || LT_POS(VIsual, m_pos))) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
614 || (LT_POS(VIsual, curwin->w_cursor) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
615 && (LT_POS(m_pos, VIsual) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
616 || LT_POS(curwin->w_cursor, m_pos)))) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
617 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
618 jump_flags = MOUSE_MAY_STOP_VIS; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
619 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
620 else if (VIsual_mode == Ctrl_V) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
621 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
622 getvcols(curwin, &curwin->w_cursor, &VIsual, |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
623 &leftcol, &rightcol); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
624 getvcol(curwin, &m_pos, NULL, &m_pos.col, NULL); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
625 if (m_pos.col < leftcol || m_pos.col > rightcol) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
626 jump_flags = MOUSE_MAY_STOP_VIS; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
627 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
628 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
629 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
630 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
631 jump_flags = MOUSE_MAY_STOP_VIS; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
632 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
633 if (jump_flags) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
634 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
635 jump_flags = jump_to_mouse(jump_flags, NULL, which_button); |
29732
89e1d67814a9
patch 9.0.0206: redraw flags are not named specifically
Bram Moolenaar <Bram@vim.org>
parents:
29674
diff
changeset
|
636 update_curbuf(VIsual_active ? UPD_INVERTED : UPD_VALID); |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
637 setcursor(); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
638 out_flush(); // Update before showing popup menu |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
639 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
640 # ifdef FEAT_MENU |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
641 show_popupmenu(); |
30980
eb51299c4bfc
patch 9.0.0825: cannot drag an entry in the tabpage line
Bram Moolenaar <Bram@vim.org>
parents:
30974
diff
changeset
|
642 got_click = FALSE; // ignore release events |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
643 # endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
644 return (jump_flags & CURSOR_MOVED) != 0; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
645 #else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
646 return FALSE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
647 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
648 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
649 if (which_button == MOUSE_LEFT |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
650 && (mod_mask & (MOD_MASK_SHIFT|MOD_MASK_ALT))) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
651 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
652 which_button = MOUSE_RIGHT; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
653 mod_mask &= ~MOD_MASK_SHIFT; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
654 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
655 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
656 |
28773
d770568e6c98
patch 8.2.4911: the mode #defines are not clearly named
Bram Moolenaar <Bram@vim.org>
parents:
28755
diff
changeset
|
657 if ((State & (MODE_NORMAL | MODE_INSERT)) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
658 && !(mod_mask & (MOD_MASK_SHIFT | MOD_MASK_CTRL))) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
659 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
660 if (which_button == MOUSE_LEFT) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
661 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
662 if (is_click) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
663 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
664 // stop Visual mode for a left click in a window, but not when |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
665 // on a status line |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
666 if (VIsual_active) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
667 jump_flags |= MOUSE_MAY_STOP_VIS; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
668 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
669 else if (mouse_has(MOUSE_VISUAL)) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
670 jump_flags |= MOUSE_MAY_VIS; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
671 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
672 else if (which_button == MOUSE_RIGHT) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
673 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
674 if (is_click && VIsual_active) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
675 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
676 // Remember the start and end of visual before moving the |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
677 // cursor. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
678 if (LT_POS(curwin->w_cursor, VIsual)) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
679 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
680 start_visual = curwin->w_cursor; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
681 end_visual = VIsual; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
682 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
683 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
684 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
685 start_visual = VIsual; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
686 end_visual = curwin->w_cursor; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
687 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
688 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
689 jump_flags |= MOUSE_FOCUS; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
690 if (mouse_has(MOUSE_VISUAL)) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
691 jump_flags |= MOUSE_MAY_VIS; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
692 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
693 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
694 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
695 // If an operator is pending, ignore all drags and releases until the |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
696 // next mouse click. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
697 if (!is_drag && oap != NULL && oap->op_type != OP_NOP) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
698 { |
30980
eb51299c4bfc
patch 9.0.0825: cannot drag an entry in the tabpage line
Bram Moolenaar <Bram@vim.org>
parents:
30974
diff
changeset
|
699 got_click = FALSE; |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
700 oap->motion_type = MCHAR; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
701 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
702 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
703 // When releasing the button let jump_to_mouse() know. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
704 if (!is_click && !is_drag) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
705 jump_flags |= MOUSE_RELEASED; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
706 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
707 // JUMP! |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
708 jump_flags = jump_to_mouse(jump_flags, |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
709 oap == NULL ? NULL : &(oap->inclusive), which_button); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
710 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
711 #ifdef FEAT_MENU |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
712 // A click in the window toolbar has no side effects. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
713 if (jump_flags & MOUSE_WINBAR) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
714 return FALSE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
715 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
716 moved = (jump_flags & CURSOR_MOVED); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
717 in_status_line = (jump_flags & IN_STATUS_LINE); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
718 in_sep_line = (jump_flags & IN_SEP_LINE); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
719 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
720 #ifdef FEAT_NETBEANS_INTG |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
721 if (isNetbeansBuffer(curbuf) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
722 && !(jump_flags & (IN_STATUS_LINE | IN_SEP_LINE))) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
723 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
724 int key = KEY2TERMCAP1(c); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
725 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
726 if (key == (int)KE_LEFTRELEASE || key == (int)KE_MIDDLERELEASE |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
727 || key == (int)KE_RIGHTRELEASE) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
728 netbeans_button_release(which_button); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
729 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
730 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
731 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
732 // When jumping to another window, clear a pending operator. That's a bit |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
733 // friendlier than beeping and not jumping to that window. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
734 if (curwin != old_curwin && oap != NULL && oap->op_type != OP_NOP) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
735 clearop(oap); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
736 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
737 #ifdef FEAT_FOLDING |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
738 if (mod_mask == 0 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
739 && !is_drag |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
740 && (jump_flags & (MOUSE_FOLD_CLOSE | MOUSE_FOLD_OPEN)) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
741 && which_button == MOUSE_LEFT) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
742 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
743 // open or close a fold at this line |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
744 if (jump_flags & MOUSE_FOLD_OPEN) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
745 openFold(curwin->w_cursor.lnum, 1L); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
746 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
747 closeFold(curwin->w_cursor.lnum, 1L); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
748 // don't move the cursor if still in the same window |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
749 if (curwin == old_curwin) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
750 curwin->w_cursor = save_cursor; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
751 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
752 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
753 |
30645
101f08b49ed3
patch 9.0.0657: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents:
29841
diff
changeset
|
754 #if defined(FEAT_CLIPBOARD) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
755 if ((jump_flags & IN_OTHER_WIN) && !VIsual_active && clip_star.available) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
756 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
757 clip_modeless(which_button, is_click, is_drag); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
758 return FALSE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
759 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
760 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
761 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
762 // Set global flag that we are extending the Visual area with mouse |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
763 // dragging; temporarily minimize 'scrolloff'. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
764 if (VIsual_active && is_drag && get_scrolloff_value()) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
765 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
766 // In the very first line, allow scrolling one line |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
767 if (mouse_row == 0) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
768 mouse_dragging = 2; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
769 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
770 mouse_dragging = 1; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
771 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
772 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
773 // When dragging the mouse above the window, scroll down. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
774 if (is_drag && mouse_row < 0 && !in_status_line) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
775 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
776 scroll_redraw(FALSE, 1L); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
777 mouse_row = 0; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
778 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
779 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
780 if (start_visual.lnum) // right click in visual mode |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
781 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
782 // When ALT is pressed make Visual mode blockwise. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
783 if (mod_mask & MOD_MASK_ALT) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
784 VIsual_mode = Ctrl_V; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
785 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
786 // In Visual-block mode, divide the area in four, pick up the corner |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
787 // that is in the quarter that the cursor is in. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
788 if (VIsual_mode == Ctrl_V) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
789 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
790 getvcols(curwin, &start_visual, &end_visual, &leftcol, &rightcol); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
791 if (curwin->w_curswant > (leftcol + rightcol) / 2) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
792 end_visual.col = leftcol; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
793 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
794 end_visual.col = rightcol; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
795 if (curwin->w_cursor.lnum >= |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
796 (start_visual.lnum + end_visual.lnum) / 2) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
797 end_visual.lnum = start_visual.lnum; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
798 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
799 // move VIsual to the right column |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
800 start_visual = curwin->w_cursor; // save the cursor pos |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
801 curwin->w_cursor = end_visual; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
802 coladvance(end_visual.col); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
803 VIsual = curwin->w_cursor; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
804 curwin->w_cursor = start_visual; // restore the cursor |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
805 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
806 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
807 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
808 // If the click is before the start of visual, change the start. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
809 // If the click is after the end of visual, change the end. If |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
810 // the click is inside the visual, change the closest side. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
811 if (LT_POS(curwin->w_cursor, start_visual)) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
812 VIsual = end_visual; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
813 else if (LT_POS(end_visual, curwin->w_cursor)) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
814 VIsual = start_visual; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
815 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
816 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
817 // In the same line, compare column number |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
818 if (end_visual.lnum == start_visual.lnum) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
819 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
820 if (curwin->w_cursor.col - start_visual.col > |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
821 end_visual.col - curwin->w_cursor.col) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
822 VIsual = start_visual; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
823 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
824 VIsual = end_visual; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
825 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
826 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
827 // In different lines, compare line number |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
828 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
829 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
830 diff = (curwin->w_cursor.lnum - start_visual.lnum) - |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
831 (end_visual.lnum - curwin->w_cursor.lnum); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
832 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
833 if (diff > 0) // closest to end |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
834 VIsual = start_visual; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
835 else if (diff < 0) // closest to start |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
836 VIsual = end_visual; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
837 else // in the middle line |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
838 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
839 if (curwin->w_cursor.col < |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
840 (start_visual.col + end_visual.col) / 2) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
841 VIsual = end_visual; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
842 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
843 VIsual = start_visual; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
844 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
845 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
846 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
847 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
848 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
849 // If Visual mode started in insert mode, execute "CTRL-O" |
28773
d770568e6c98
patch 8.2.4911: the mode #defines are not clearly named
Bram Moolenaar <Bram@vim.org>
parents:
28755
diff
changeset
|
850 else if ((State & MODE_INSERT) && VIsual_active) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
851 stuffcharReadbuff(Ctrl_O); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
852 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
853 // Middle mouse click: Put text before cursor. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
854 if (which_button == MOUSE_MIDDLE) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
855 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
856 #ifdef FEAT_CLIPBOARD |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
857 if (clip_star.available && regname == 0) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
858 regname = '*'; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
859 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
860 if (yank_register_mline(regname)) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
861 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
862 if (mouse_past_bottom) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
863 dir = FORWARD; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
864 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
865 else if (mouse_past_eol) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
866 dir = FORWARD; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
867 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
868 if (fixindent) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
869 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
870 c1 = (dir == BACKWARD) ? '[' : ']'; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
871 c2 = 'p'; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
872 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
873 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
874 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
875 c1 = (dir == FORWARD) ? 'p' : 'P'; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
876 c2 = NUL; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
877 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
878 prep_redo(regname, count, NUL, c1, NUL, c2, NUL); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
879 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
880 // Remember where the paste started, so in edit() Insstart can be set |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
881 // to this position |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
882 if (restart_edit != 0) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
883 where_paste_started = curwin->w_cursor; |
22176
6941d3205be9
patch 8.2.1637: Vim9: :put ={expr} does not work inside :def function
Bram Moolenaar <Bram@vim.org>
parents:
21745
diff
changeset
|
884 do_put(regname, NULL, dir, count, fixindent | PUT_CURSEND); |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
885 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
886 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
887 #if defined(FEAT_QUICKFIX) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
888 // Ctrl-Mouse click or double click in a quickfix window jumps to the |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
889 // error under the mouse pointer. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
890 else if (((mod_mask & MOD_MASK_CTRL) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
891 || (mod_mask & MOD_MASK_MULTI_CLICK) == MOD_MASK_2CLICK) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
892 && bt_quickfix(curbuf)) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
893 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
894 if (curwin->w_llist_ref == NULL) // quickfix window |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
895 do_cmdline_cmd((char_u *)".cc"); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
896 else // location list window |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
897 do_cmdline_cmd((char_u *)".ll"); |
30980
eb51299c4bfc
patch 9.0.0825: cannot drag an entry in the tabpage line
Bram Moolenaar <Bram@vim.org>
parents:
30974
diff
changeset
|
898 got_click = FALSE; // ignore drag&release now |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
899 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
900 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
901 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
902 // Ctrl-Mouse click (or double click in a help window) jumps to the tag |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
903 // under the mouse pointer. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
904 else if ((mod_mask & MOD_MASK_CTRL) || (curbuf->b_help |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
905 && (mod_mask & MOD_MASK_MULTI_CLICK) == MOD_MASK_2CLICK)) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
906 { |
28773
d770568e6c98
patch 8.2.4911: the mode #defines are not clearly named
Bram Moolenaar <Bram@vim.org>
parents:
28755
diff
changeset
|
907 if (State & MODE_INSERT) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
908 stuffcharReadbuff(Ctrl_O); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
909 stuffcharReadbuff(Ctrl_RSB); |
30980
eb51299c4bfc
patch 9.0.0825: cannot drag an entry in the tabpage line
Bram Moolenaar <Bram@vim.org>
parents:
30974
diff
changeset
|
910 got_click = FALSE; // ignore drag&release now |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
911 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
912 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
913 // Shift-Mouse click searches for the next occurrence of the word under |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
914 // the mouse pointer |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
915 else if ((mod_mask & MOD_MASK_SHIFT)) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
916 { |
28773
d770568e6c98
patch 8.2.4911: the mode #defines are not clearly named
Bram Moolenaar <Bram@vim.org>
parents:
28755
diff
changeset
|
917 if ((State & MODE_INSERT) || (VIsual_active && VIsual_select)) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
918 stuffcharReadbuff(Ctrl_O); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
919 if (which_button == MOUSE_LEFT) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
920 stuffcharReadbuff('*'); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
921 else // MOUSE_RIGHT |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
922 stuffcharReadbuff('#'); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
923 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
924 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
925 // Handle double clicks, unless on status line |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
926 else if (in_status_line) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
927 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
928 #ifdef FEAT_MOUSESHAPE |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
929 if ((is_drag || is_click) && !drag_status_line) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
930 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
931 drag_status_line = TRUE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
932 update_mouseshape(-1); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
933 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
934 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
935 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
936 else if (in_sep_line) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
937 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
938 #ifdef FEAT_MOUSESHAPE |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
939 if ((is_drag || is_click) && !drag_sep_line) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
940 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
941 drag_sep_line = TRUE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
942 update_mouseshape(-1); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
943 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
944 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
945 } |
28773
d770568e6c98
patch 8.2.4911: the mode #defines are not clearly named
Bram Moolenaar <Bram@vim.org>
parents:
28755
diff
changeset
|
946 else if ((mod_mask & MOD_MASK_MULTI_CLICK) |
d770568e6c98
patch 8.2.4911: the mode #defines are not clearly named
Bram Moolenaar <Bram@vim.org>
parents:
28755
diff
changeset
|
947 && (State & (MODE_NORMAL | MODE_INSERT)) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
948 && mouse_has(MOUSE_VISUAL)) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
949 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
950 if (is_click || !VIsual_active) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
951 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
952 if (VIsual_active) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
953 orig_cursor = VIsual; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
954 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
955 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
956 check_visual_highlight(); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
957 VIsual = curwin->w_cursor; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
958 orig_cursor = VIsual; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
959 VIsual_active = TRUE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
960 VIsual_reselect = TRUE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
961 // start Select mode if 'selectmode' contains "mouse" |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
962 may_start_select('o'); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
963 setmouse(); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
964 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
965 if ((mod_mask & MOD_MASK_MULTI_CLICK) == MOD_MASK_2CLICK) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
966 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
967 // Double click with ALT pressed makes it blockwise. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
968 if (mod_mask & MOD_MASK_ALT) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
969 VIsual_mode = Ctrl_V; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
970 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
971 VIsual_mode = 'v'; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
972 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
973 else if ((mod_mask & MOD_MASK_MULTI_CLICK) == MOD_MASK_3CLICK) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
974 VIsual_mode = 'V'; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
975 else if ((mod_mask & MOD_MASK_MULTI_CLICK) == MOD_MASK_4CLICK) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
976 VIsual_mode = Ctrl_V; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
977 #ifdef FEAT_CLIPBOARD |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
978 // Make sure the clipboard gets updated. Needed because start and |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
979 // end may still be the same, and the selection needs to be owned |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
980 clip_star.vmode = NUL; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
981 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
982 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
983 // A double click selects a word or a block. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
984 if ((mod_mask & MOD_MASK_MULTI_CLICK) == MOD_MASK_2CLICK) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
985 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
986 pos_T *pos = NULL; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
987 int gc; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
988 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
989 if (is_click) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
990 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
991 // If the character under the cursor (skipping white space) is |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
992 // not a word character, try finding a match and select a (), |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
993 // {}, [], #if/#endif, etc. block. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
994 end_visual = curwin->w_cursor; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
995 while (gc = gchar_pos(&end_visual), VIM_ISWHITE(gc)) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
996 inc(&end_visual); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
997 if (oap != NULL) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
998 oap->motion_type = MCHAR; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
999 if (oap != NULL |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1000 && VIsual_mode == 'v' |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1001 && !vim_iswordc(gchar_pos(&end_visual)) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1002 && EQUAL_POS(curwin->w_cursor, VIsual) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1003 && (pos = findmatch(oap, NUL)) != NULL) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1004 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1005 curwin->w_cursor = *pos; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1006 if (oap->motion_type == MLINE) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1007 VIsual_mode = 'V'; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1008 else if (*p_sel == 'e') |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1009 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1010 if (LT_POS(curwin->w_cursor, VIsual)) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1011 ++VIsual.col; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1012 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1013 ++curwin->w_cursor.col; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1014 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1015 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1016 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1017 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1018 if (pos == NULL && (is_click || is_drag)) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1019 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1020 // When not found a match or when dragging: extend to include |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1021 // a word. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1022 if (LT_POS(curwin->w_cursor, orig_cursor)) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1023 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1024 find_start_of_word(&curwin->w_cursor); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1025 find_end_of_word(&VIsual); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1026 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1027 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1028 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1029 find_start_of_word(&VIsual); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1030 if (*p_sel == 'e' && *ml_get_cursor() != NUL) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1031 curwin->w_cursor.col += |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1032 (*mb_ptr2len)(ml_get_cursor()); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1033 find_end_of_word(&curwin->w_cursor); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1034 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1035 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1036 curwin->w_set_curswant = TRUE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1037 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1038 if (is_click) |
29732
89e1d67814a9
patch 9.0.0206: redraw flags are not named specifically
Bram Moolenaar <Bram@vim.org>
parents:
29674
diff
changeset
|
1039 redraw_curbuf_later(UPD_INVERTED); // update the inversion |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1040 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1041 else if (VIsual_active && !old_active) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1042 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1043 if (mod_mask & MOD_MASK_ALT) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1044 VIsual_mode = Ctrl_V; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1045 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1046 VIsual_mode = 'v'; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1047 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1048 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1049 // If Visual mode changed show it later. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1050 if ((!VIsual_active && old_active && mode_displayed) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1051 || (VIsual_active && p_smd && msg_silent == 0 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1052 && (!old_active || VIsual_mode != old_mode))) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1053 redraw_cmdline = TRUE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1054 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1055 return moved; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1056 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1057 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1058 void |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1059 ins_mouse(int c) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1060 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1061 pos_T tpos; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1062 win_T *old_curwin = curwin; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1063 |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1064 #ifdef FEAT_GUI |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1065 // When GUI is active, also move/paste when 'mouse' is empty |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1066 if (!gui.in_use) |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1067 #endif |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1068 if (!mouse_has(MOUSE_INSERT)) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1069 return; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1070 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1071 undisplay_dollar(); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1072 tpos = curwin->w_cursor; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1073 if (do_mouse(NULL, c, BACKWARD, 1L, 0)) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1074 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1075 win_T *new_curwin = curwin; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1076 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1077 if (curwin != old_curwin && win_valid(old_curwin)) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1078 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1079 // Mouse took us to another window. We need to go back to the |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1080 // previous one to stop insert there properly. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1081 curwin = old_curwin; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1082 curbuf = curwin->w_buffer; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1083 #ifdef FEAT_JOB_CHANNEL |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1084 if (bt_prompt(curbuf)) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1085 // Restart Insert mode when re-entering the prompt buffer. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1086 curbuf->b_prompt_insert = 'A'; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1087 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1088 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1089 start_arrow(curwin == old_curwin ? &tpos : NULL); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1090 if (curwin != new_curwin && win_valid(new_curwin)) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1091 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1092 curwin = new_curwin; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1093 curbuf = curwin->w_buffer; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1094 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1095 set_can_cindent(TRUE); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1096 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1097 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1098 // redraw status lines (in case another window became active) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1099 redraw_statuslines(); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1100 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1101 |
31103
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
1102 /* |
31144
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1103 * Common mouse wheel scrolling, shared between Insert mode and NV modes. |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1104 * Default action is to scroll mouse_vert_step lines (or mouse_hor_step columns |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1105 * depending on the scroll direction) or one page when Shift or Ctrl is used. |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1106 * Direction is indicated by "cap->arg": |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1107 * K_MOUSEUP - MSCR_UP |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1108 * K_MOUSEDOWN - MSCR_DOWN |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1109 * K_MOUSELEFT - MSCR_LEFT |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1110 * K_MOUSERIGHT - MSCR_RIGHT |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1111 * "curwin" may have been changed to the window that should be scrolled and |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1112 * differ from the window that actually has focus. |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1113 */ |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1114 static void |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1115 do_mousescroll(cmdarg_T *cap) |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1116 { |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1117 int shift_or_ctrl = mod_mask & (MOD_MASK_SHIFT | MOD_MASK_CTRL); |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1118 |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1119 #ifdef FEAT_TERMINAL |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1120 if (term_use_loop()) |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1121 // This window is a terminal window, send the mouse event there. |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1122 // Set "typed" to FALSE to avoid an endless loop. |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1123 send_keys_to_term(curbuf->b_term, cap->cmdchar, mod_mask, FALSE); |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1124 else |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1125 #endif |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1126 if (cap->arg == MSCR_UP || cap->arg == MSCR_DOWN) |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1127 { |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1128 // Vertical scrolling |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1129 if (!(State & MODE_INSERT) && (mouse_vert_step < 0 || shift_or_ctrl)) |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1130 { |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1131 // whole page up or down |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1132 onepage(cap->arg == MSCR_UP ? FORWARD : BACKWARD, 1L); |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1133 } |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1134 else |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1135 { |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1136 if (mouse_vert_step < 0 || shift_or_ctrl) |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1137 { |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1138 // whole page up or down |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1139 cap->count1 = (long)(curwin->w_botline - curwin->w_topline); |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1140 } |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1141 // Don't scroll more than half the window height. |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1142 else if (curwin->w_height < mouse_vert_step * 2) |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1143 { |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1144 cap->count1 = curwin->w_height / 2; |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1145 if (cap->count1 == 0) |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1146 cap->count1 = 1; |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1147 } |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1148 else |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1149 { |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1150 cap->count1 = mouse_vert_step; |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1151 } |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1152 cap->count0 = cap->count1; |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1153 nv_scroll_line(cap); |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1154 } |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1155 |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1156 #ifdef FEAT_PROP_POPUP |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1157 if (WIN_IS_POPUP(curwin)) |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1158 popup_set_firstline(curwin); |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1159 #endif |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1160 } |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1161 else |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1162 { |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1163 // Horizontal scrolling |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1164 long step = (mouse_hor_step < 0 || shift_or_ctrl) |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1165 ? curwin->w_width : mouse_hor_step; |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1166 long leftcol = curwin->w_leftcol |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1167 + (cap->arg == MSCR_RIGHT ? -step : step); |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1168 if (leftcol < 0) |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1169 leftcol = 0; |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1170 do_mousescroll_horiz((long_u)leftcol); |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1171 } |
31166
a86ee6c0309e
patch 9.0.0917: the WinScrolled autocommand event is not enough
Bram Moolenaar <Bram@vim.org>
parents:
31154
diff
changeset
|
1172 may_trigger_win_scrolled_resized(); |
31144
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1173 } |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1174 |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1175 /* |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1176 * Insert mode implementation for scrolling in direction "dir", which is |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1177 * one of the MSCR_ values. |
31103
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
1178 */ |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1179 void |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1180 ins_mousescroll(int dir) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1181 { |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1182 cmdarg_T cap; |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1183 oparg_T oa; |
31103
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
1184 CLEAR_FIELD(cap); |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
1185 clear_oparg(&oa); |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
1186 cap.oap = &oa; |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1187 cap.arg = dir; |
28755
26a2836923d6
patch 8.2.4902: mouse wheel scrolling is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
28558
diff
changeset
|
1188 |
31103
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
1189 switch (dir) |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
1190 { |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
1191 case MSCR_UP: |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
1192 cap.cmdchar = K_MOUSEUP; |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
1193 break; |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
1194 case MSCR_DOWN: |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
1195 cap.cmdchar = K_MOUSEDOWN; |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
1196 break; |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
1197 case MSCR_LEFT: |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
1198 cap.cmdchar = K_MOUSELEFT; |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
1199 break; |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
1200 case MSCR_RIGHT: |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
1201 cap.cmdchar = K_MOUSERIGHT; |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
1202 break; |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
1203 default: |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
1204 siemsg("Invalid ins_mousescroll() argument: %d", dir); |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1205 } |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1206 |
31144
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1207 win_T *old_curwin = curwin; |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1208 if (mouse_row >= 0 && mouse_col >= 0) |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1209 { |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1210 // Find the window at the mouse pointer coordinates. |
31144
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1211 // NOTE: Must restore "curwin" to "old_curwin" before returning! |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1212 int row = mouse_row; |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1213 int col = mouse_col; |
31144
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1214 curwin = mouse_find_win(&row, &col, FIND_POPUP); |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1215 if (curwin == NULL) |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1216 { |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1217 curwin = old_curwin; |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1218 return; |
31144
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1219 } |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1220 curbuf = curwin->w_buffer; |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1221 } |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1222 |
31144
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1223 if (curwin == old_curwin) |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1224 { |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1225 // Don't scroll the current window if the popup menu is visible. |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1226 if (pum_visible()) |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1227 return; |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1228 |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1229 undisplay_dollar(); |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1230 } |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1231 |
31144
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1232 linenr_T orig_topline = curwin->w_topline; |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1233 colnr_T orig_leftcol = curwin->w_leftcol; |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1234 pos_T orig_cursor = curwin->w_cursor; |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1235 |
31144
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1236 // Call the common mouse scroll function shared with other modes. |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1237 do_mousescroll(&cap); |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1238 |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1239 int did_scroll = (orig_topline != curwin->w_topline |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1240 || orig_leftcol != curwin->w_leftcol); |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1241 |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1242 curwin->w_redr_status = TRUE; |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1243 curwin = old_curwin; |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1244 curbuf = curwin->w_buffer; |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1245 |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1246 // If the window actually scrolled and the popup menu may overlay the |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1247 // window, need to redraw it. |
31144
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
1248 if (did_scroll && pum_visible()) |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1249 { |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1250 // TODO: Would be more efficient to only redraw the windows that are |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1251 // overlapped by the popup menu. |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1252 redraw_all_later(UPD_NOT_VALID); |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1253 ins_compl_show_pum(); |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1254 } |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1255 |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1256 if (!EQUAL_POS(curwin->w_cursor, orig_cursor)) |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1257 { |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1258 start_arrow(&orig_cursor); |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1259 set_can_cindent(TRUE); |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1260 } |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1261 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1262 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1263 /* |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1264 * Return TRUE if "c" is a mouse key. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1265 */ |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1266 int |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1267 is_mouse_key(int c) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1268 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1269 return c == K_LEFTMOUSE |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1270 || c == K_LEFTMOUSE_NM |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1271 || c == K_LEFTDRAG |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1272 || c == K_LEFTRELEASE |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1273 || c == K_LEFTRELEASE_NM |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1274 || c == K_MOUSEMOVE |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1275 || c == K_MIDDLEMOUSE |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1276 || c == K_MIDDLEDRAG |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1277 || c == K_MIDDLERELEASE |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1278 || c == K_RIGHTMOUSE |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1279 || c == K_RIGHTDRAG |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1280 || c == K_RIGHTRELEASE |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1281 || c == K_MOUSEDOWN |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1282 || c == K_MOUSEUP |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1283 || c == K_MOUSELEFT |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1284 || c == K_MOUSERIGHT |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1285 || c == K_X1MOUSE |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1286 || c == K_X1DRAG |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1287 || c == K_X1RELEASE |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1288 || c == K_X2MOUSE |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1289 || c == K_X2DRAG |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1290 || c == K_X2RELEASE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1291 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1292 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1293 static struct mousetable |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1294 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1295 int pseudo_code; // Code for pseudo mouse event |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1296 int button; // Which mouse button is it? |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1297 int is_click; // Is it a mouse button click event? |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1298 int is_drag; // Is it a mouse drag event? |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1299 } mouse_table[] = |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1300 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1301 {(int)KE_LEFTMOUSE, MOUSE_LEFT, TRUE, FALSE}, |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1302 #ifdef FEAT_GUI |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1303 {(int)KE_LEFTMOUSE_NM, MOUSE_LEFT, TRUE, FALSE}, |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1304 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1305 {(int)KE_LEFTDRAG, MOUSE_LEFT, FALSE, TRUE}, |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1306 {(int)KE_LEFTRELEASE, MOUSE_LEFT, FALSE, FALSE}, |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1307 #ifdef FEAT_GUI |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1308 {(int)KE_LEFTRELEASE_NM, MOUSE_LEFT, FALSE, FALSE}, |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1309 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1310 {(int)KE_MIDDLEMOUSE, MOUSE_MIDDLE, TRUE, FALSE}, |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1311 {(int)KE_MIDDLEDRAG, MOUSE_MIDDLE, FALSE, TRUE}, |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1312 {(int)KE_MIDDLERELEASE, MOUSE_MIDDLE, FALSE, FALSE}, |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1313 {(int)KE_RIGHTMOUSE, MOUSE_RIGHT, TRUE, FALSE}, |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1314 {(int)KE_RIGHTDRAG, MOUSE_RIGHT, FALSE, TRUE}, |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1315 {(int)KE_RIGHTRELEASE, MOUSE_RIGHT, FALSE, FALSE}, |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1316 {(int)KE_X1MOUSE, MOUSE_X1, TRUE, FALSE}, |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1317 {(int)KE_X1DRAG, MOUSE_X1, FALSE, TRUE}, |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1318 {(int)KE_X1RELEASE, MOUSE_X1, FALSE, FALSE}, |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1319 {(int)KE_X2MOUSE, MOUSE_X2, TRUE, FALSE}, |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1320 {(int)KE_X2DRAG, MOUSE_X2, FALSE, TRUE}, |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1321 {(int)KE_X2RELEASE, MOUSE_X2, FALSE, FALSE}, |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1322 // DRAG without CLICK |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1323 {(int)KE_MOUSEMOVE, MOUSE_RELEASE, FALSE, TRUE}, |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1324 // RELEASE without CLICK |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1325 {(int)KE_IGNORE, MOUSE_RELEASE, FALSE, FALSE}, |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1326 {0, 0, 0, 0}, |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1327 }; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1328 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1329 /* |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1330 * Look up the given mouse code to return the relevant information in the other |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1331 * arguments. Return which button is down or was released. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1332 */ |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1333 int |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1334 get_mouse_button(int code, int *is_click, int *is_drag) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1335 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1336 int i; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1337 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1338 for (i = 0; mouse_table[i].pseudo_code; i++) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1339 if (code == mouse_table[i].pseudo_code) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1340 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1341 *is_click = mouse_table[i].is_click; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1342 *is_drag = mouse_table[i].is_drag; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1343 return mouse_table[i].button; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1344 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1345 return 0; // Shouldn't get here |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1346 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1347 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1348 /* |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1349 * Return the appropriate pseudo mouse event token (KE_LEFTMOUSE etc) based on |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1350 * the given information about which mouse button is down, and whether the |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1351 * mouse was clicked, dragged or released. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1352 */ |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1353 int |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1354 get_pseudo_mouse_code( |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1355 int button, // eg MOUSE_LEFT |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1356 int is_click, |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1357 int is_drag) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1358 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1359 int i; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1360 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1361 for (i = 0; mouse_table[i].pseudo_code; i++) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1362 if (button == mouse_table[i].button |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1363 && is_click == mouse_table[i].is_click |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1364 && is_drag == mouse_table[i].is_drag) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1365 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1366 #ifdef FEAT_GUI |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1367 // Trick: a non mappable left click and release has mouse_col -1 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1368 // or added MOUSE_COLOFF. Used for 'mousefocus' in |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1369 // gui_mouse_moved() |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1370 if (mouse_col < 0 || mouse_col > MOUSE_COLOFF) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1371 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1372 if (mouse_col < 0) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1373 mouse_col = 0; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1374 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1375 mouse_col -= MOUSE_COLOFF; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1376 if (mouse_table[i].pseudo_code == (int)KE_LEFTMOUSE) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1377 return (int)KE_LEFTMOUSE_NM; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1378 if (mouse_table[i].pseudo_code == (int)KE_LEFTRELEASE) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1379 return (int)KE_LEFTRELEASE_NM; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1380 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1381 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1382 return mouse_table[i].pseudo_code; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1383 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1384 return (int)KE_IGNORE; // not recognized, ignore it |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1385 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1386 |
18354
9f51d0cef8da
patch 8.1.2171: mouse support not always available
Bram Moolenaar <Bram@vim.org>
parents:
18150
diff
changeset
|
1387 # define HMT_NORMAL 1 |
9f51d0cef8da
patch 8.1.2171: mouse support not always available
Bram Moolenaar <Bram@vim.org>
parents:
18150
diff
changeset
|
1388 # define HMT_NETTERM 2 |
9f51d0cef8da
patch 8.1.2171: mouse support not always available
Bram Moolenaar <Bram@vim.org>
parents:
18150
diff
changeset
|
1389 # define HMT_DEC 4 |
9f51d0cef8da
patch 8.1.2171: mouse support not always available
Bram Moolenaar <Bram@vim.org>
parents:
18150
diff
changeset
|
1390 # define HMT_JSBTERM 8 |
9f51d0cef8da
patch 8.1.2171: mouse support not always available
Bram Moolenaar <Bram@vim.org>
parents:
18150
diff
changeset
|
1391 # define HMT_PTERM 16 |
9f51d0cef8da
patch 8.1.2171: mouse support not always available
Bram Moolenaar <Bram@vim.org>
parents:
18150
diff
changeset
|
1392 # define HMT_URXVT 32 |
9f51d0cef8da
patch 8.1.2171: mouse support not always available
Bram Moolenaar <Bram@vim.org>
parents:
18150
diff
changeset
|
1393 # define HMT_GPM 64 |
9f51d0cef8da
patch 8.1.2171: mouse support not always available
Bram Moolenaar <Bram@vim.org>
parents:
18150
diff
changeset
|
1394 # define HMT_SGR 128 |
9f51d0cef8da
patch 8.1.2171: mouse support not always available
Bram Moolenaar <Bram@vim.org>
parents:
18150
diff
changeset
|
1395 # define HMT_SGR_REL 256 |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1396 static int has_mouse_termcode = 0; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1397 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1398 void |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1399 set_mouse_termcode( |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1400 int n, // KS_MOUSE, KS_NETTERM_MOUSE or KS_DEC_MOUSE |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1401 char_u *s) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1402 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1403 char_u name[2]; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1404 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1405 name[0] = n; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1406 name[1] = KE_FILLER; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1407 add_termcode(name, s, FALSE); |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1408 #ifdef FEAT_MOUSE_JSB |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1409 if (n == KS_JSBTERM_MOUSE) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1410 has_mouse_termcode |= HMT_JSBTERM; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1411 else |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1412 #endif |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1413 #ifdef FEAT_MOUSE_NET |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1414 if (n == KS_NETTERM_MOUSE) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1415 has_mouse_termcode |= HMT_NETTERM; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1416 else |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1417 #endif |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1418 #ifdef FEAT_MOUSE_DEC |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1419 if (n == KS_DEC_MOUSE) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1420 has_mouse_termcode |= HMT_DEC; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1421 else |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1422 #endif |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1423 #ifdef FEAT_MOUSE_PTERM |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1424 if (n == KS_PTERM_MOUSE) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1425 has_mouse_termcode |= HMT_PTERM; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1426 else |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1427 #endif |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1428 #ifdef FEAT_MOUSE_URXVT |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1429 if (n == KS_URXVT_MOUSE) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1430 has_mouse_termcode |= HMT_URXVT; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1431 else |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1432 #endif |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1433 #ifdef FEAT_MOUSE_GPM |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1434 if (n == KS_GPM_MOUSE) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1435 has_mouse_termcode |= HMT_GPM; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1436 else |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1437 #endif |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1438 if (n == KS_SGR_MOUSE) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1439 has_mouse_termcode |= HMT_SGR; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1440 else if (n == KS_SGR_MOUSE_RELEASE) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1441 has_mouse_termcode |= HMT_SGR_REL; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1442 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1443 has_mouse_termcode |= HMT_NORMAL; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1444 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1445 |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1446 #if defined(UNIX) || defined(VMS) || defined(PROTO) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1447 void |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1448 del_mouse_termcode( |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1449 int n) // KS_MOUSE, KS_NETTERM_MOUSE or KS_DEC_MOUSE |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1450 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1451 char_u name[2]; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1452 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1453 name[0] = n; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1454 name[1] = KE_FILLER; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1455 del_termcode(name); |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1456 # ifdef FEAT_MOUSE_JSB |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1457 if (n == KS_JSBTERM_MOUSE) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1458 has_mouse_termcode &= ~HMT_JSBTERM; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1459 else |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1460 # endif |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1461 # ifdef FEAT_MOUSE_NET |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1462 if (n == KS_NETTERM_MOUSE) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1463 has_mouse_termcode &= ~HMT_NETTERM; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1464 else |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1465 # endif |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1466 # ifdef FEAT_MOUSE_DEC |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1467 if (n == KS_DEC_MOUSE) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1468 has_mouse_termcode &= ~HMT_DEC; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1469 else |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1470 # endif |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1471 # ifdef FEAT_MOUSE_PTERM |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1472 if (n == KS_PTERM_MOUSE) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1473 has_mouse_termcode &= ~HMT_PTERM; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1474 else |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1475 # endif |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1476 # ifdef FEAT_MOUSE_URXVT |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1477 if (n == KS_URXVT_MOUSE) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1478 has_mouse_termcode &= ~HMT_URXVT; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1479 else |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1480 # endif |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1481 # ifdef FEAT_MOUSE_GPM |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1482 if (n == KS_GPM_MOUSE) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1483 has_mouse_termcode &= ~HMT_GPM; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1484 else |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1485 # endif |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1486 if (n == KS_SGR_MOUSE) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1487 has_mouse_termcode &= ~HMT_SGR; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1488 else if (n == KS_SGR_MOUSE_RELEASE) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1489 has_mouse_termcode &= ~HMT_SGR_REL; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1490 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1491 has_mouse_termcode &= ~HMT_NORMAL; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1492 } |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1493 #endif |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1494 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1495 /* |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1496 * setmouse() - switch mouse on/off depending on current mode and 'mouse' |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1497 */ |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1498 void |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1499 setmouse(void) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1500 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1501 int checkfor; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1502 |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1503 #ifdef FEAT_MOUSESHAPE |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1504 update_mouseshape(-1); |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1505 #endif |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1506 |
18354
9f51d0cef8da
patch 8.1.2171: mouse support not always available
Bram Moolenaar <Bram@vim.org>
parents:
18150
diff
changeset
|
1507 // Should be outside proc, but may break MOUSESHAPE |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1508 #ifdef FEAT_GUI |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1509 // In the GUI the mouse is always enabled. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1510 if (gui.in_use) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1511 return; |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1512 #endif |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1513 // be quick when mouse is off |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1514 if (*p_mouse == NUL || has_mouse_termcode == 0) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1515 return; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1516 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1517 // don't switch mouse on when not in raw mode (Ex mode) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1518 if (cur_tmode != TMODE_RAW) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1519 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1520 mch_setmouse(FALSE); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1521 return; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1522 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1523 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1524 if (VIsual_active) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1525 checkfor = MOUSE_VISUAL; |
28773
d770568e6c98
patch 8.2.4911: the mode #defines are not clearly named
Bram Moolenaar <Bram@vim.org>
parents:
28755
diff
changeset
|
1526 else if (State == MODE_HITRETURN || State == MODE_ASKMORE |
d770568e6c98
patch 8.2.4911: the mode #defines are not clearly named
Bram Moolenaar <Bram@vim.org>
parents:
28755
diff
changeset
|
1527 || State == MODE_SETWSIZE) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1528 checkfor = MOUSE_RETURN; |
28773
d770568e6c98
patch 8.2.4911: the mode #defines are not clearly named
Bram Moolenaar <Bram@vim.org>
parents:
28755
diff
changeset
|
1529 else if (State & MODE_INSERT) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1530 checkfor = MOUSE_INSERT; |
28773
d770568e6c98
patch 8.2.4911: the mode #defines are not clearly named
Bram Moolenaar <Bram@vim.org>
parents:
28755
diff
changeset
|
1531 else if (State & MODE_CMDLINE) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1532 checkfor = MOUSE_COMMAND; |
28773
d770568e6c98
patch 8.2.4911: the mode #defines are not clearly named
Bram Moolenaar <Bram@vim.org>
parents:
28755
diff
changeset
|
1533 else if (State == MODE_CONFIRM || State == MODE_EXTERNCMD) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1534 checkfor = ' '; // don't use mouse for ":confirm" or ":!cmd" |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1535 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1536 checkfor = MOUSE_NORMAL; // assume normal mode |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1537 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1538 if (mouse_has(checkfor)) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1539 mch_setmouse(TRUE); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1540 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1541 mch_setmouse(FALSE); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1542 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1543 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1544 /* |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1545 * Return TRUE if |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1546 * - "c" is in 'mouse', or |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1547 * - 'a' is in 'mouse' and "c" is in MOUSE_A, or |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1548 * - the current buffer is a help file and 'h' is in 'mouse' and we are in a |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1549 * normal editing mode (not at hit-return message). |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1550 */ |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1551 int |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1552 mouse_has(int c) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1553 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1554 char_u *p; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1555 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1556 for (p = p_mouse; *p; ++p) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1557 switch (*p) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1558 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1559 case 'a': if (vim_strchr((char_u *)MOUSE_A, c) != NULL) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1560 return TRUE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1561 break; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1562 case MOUSE_HELP: if (c != MOUSE_RETURN && curbuf->b_help) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1563 return TRUE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1564 break; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1565 default: if (c == *p) return TRUE; break; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1566 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1567 return FALSE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1568 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1569 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1570 /* |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1571 * Return TRUE when 'mousemodel' is set to "popup" or "popup_setpos". |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1572 */ |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1573 int |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1574 mouse_model_popup(void) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1575 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1576 return (p_mousem[0] == 'p'); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1577 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1578 |
30980
eb51299c4bfc
patch 9.0.0825: cannot drag an entry in the tabpage line
Bram Moolenaar <Bram@vim.org>
parents:
30974
diff
changeset
|
1579 static win_T *dragwin = NULL; // window being dragged |
eb51299c4bfc
patch 9.0.0825: cannot drag an entry in the tabpage line
Bram Moolenaar <Bram@vim.org>
parents:
30974
diff
changeset
|
1580 |
eb51299c4bfc
patch 9.0.0825: cannot drag an entry in the tabpage line
Bram Moolenaar <Bram@vim.org>
parents:
30974
diff
changeset
|
1581 /* |
eb51299c4bfc
patch 9.0.0825: cannot drag an entry in the tabpage line
Bram Moolenaar <Bram@vim.org>
parents:
30974
diff
changeset
|
1582 * Reset the window being dragged. To be called when switching tab page. |
eb51299c4bfc
patch 9.0.0825: cannot drag an entry in the tabpage line
Bram Moolenaar <Bram@vim.org>
parents:
30974
diff
changeset
|
1583 */ |
eb51299c4bfc
patch 9.0.0825: cannot drag an entry in the tabpage line
Bram Moolenaar <Bram@vim.org>
parents:
30974
diff
changeset
|
1584 void |
eb51299c4bfc
patch 9.0.0825: cannot drag an entry in the tabpage line
Bram Moolenaar <Bram@vim.org>
parents:
30974
diff
changeset
|
1585 reset_dragwin(void) |
eb51299c4bfc
patch 9.0.0825: cannot drag an entry in the tabpage line
Bram Moolenaar <Bram@vim.org>
parents:
30974
diff
changeset
|
1586 { |
eb51299c4bfc
patch 9.0.0825: cannot drag an entry in the tabpage line
Bram Moolenaar <Bram@vim.org>
parents:
30974
diff
changeset
|
1587 dragwin = NULL; |
eb51299c4bfc
patch 9.0.0825: cannot drag an entry in the tabpage line
Bram Moolenaar <Bram@vim.org>
parents:
30974
diff
changeset
|
1588 } |
eb51299c4bfc
patch 9.0.0825: cannot drag an entry in the tabpage line
Bram Moolenaar <Bram@vim.org>
parents:
30974
diff
changeset
|
1589 |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1590 /* |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1591 * Move the cursor to the specified row and column on the screen. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1592 * Change current window if necessary. Returns an integer with the |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1593 * CURSOR_MOVED bit set if the cursor has moved or unset otherwise. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1594 * |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1595 * The MOUSE_FOLD_CLOSE bit is set when clicked on the '-' in a fold column. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1596 * The MOUSE_FOLD_OPEN bit is set when clicked on the '+' in a fold column. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1597 * |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1598 * If flags has MOUSE_FOCUS, then the current window will not be changed, and |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1599 * if the mouse is outside the window then the text will scroll, or if the |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1600 * mouse was previously on a status line, then the status line may be dragged. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1601 * |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1602 * If flags has MOUSE_MAY_VIS, then VIsual mode will be started before the |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1603 * cursor is moved unless the cursor was on a status line. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1604 * This function returns one of IN_UNKNOWN, IN_BUFFER, IN_STATUS_LINE or |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1605 * IN_SEP_LINE depending on where the cursor was clicked. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1606 * |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1607 * If flags has MOUSE_MAY_STOP_VIS, then Visual mode will be stopped, unless |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1608 * the mouse is on the status line of the same window. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1609 * |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1610 * If flags has MOUSE_DID_MOVE, nothing is done if the mouse didn't move since |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1611 * the last call. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1612 * |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1613 * If flags has MOUSE_SETPOS, nothing is done, only the current position is |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1614 * remembered. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1615 */ |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1616 int |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1617 jump_to_mouse( |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1618 int flags, |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1619 int *inclusive, // used for inclusive operator, can be NULL |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1620 int which_button) // MOUSE_LEFT, MOUSE_RIGHT, MOUSE_MIDDLE |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1621 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1622 static int on_status_line = 0; // #lines below bottom of window |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1623 static int on_sep_line = 0; // on separator right of window |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1624 #ifdef FEAT_MENU |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1625 static int in_winbar = FALSE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1626 #endif |
18763
49b78d6465e5
patch 8.1.2371: FEAT_TEXT_PROP is a confusing name
Bram Moolenaar <Bram@vim.org>
parents:
18691
diff
changeset
|
1627 #ifdef FEAT_PROP_POPUP |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1628 static int in_popup_win = FALSE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1629 static win_T *click_in_popup_win = NULL; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1630 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1631 static int prev_row = -1; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1632 static int prev_col = -1; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1633 static int did_drag = FALSE; // drag was noticed |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1634 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1635 win_T *wp, *old_curwin; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1636 pos_T old_cursor; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1637 int count; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1638 int first; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1639 int row = mouse_row; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1640 int col = mouse_col; |
29413
34e93e046526
patch 9.0.0048: cursor in wrong column with mouse click after concealed text
Bram Moolenaar <Bram@vim.org>
parents:
29387
diff
changeset
|
1641 colnr_T col_from_screen = -1; |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1642 #ifdef FEAT_FOLDING |
29413
34e93e046526
patch 9.0.0048: cursor in wrong column with mouse click after concealed text
Bram Moolenaar <Bram@vim.org>
parents:
29387
diff
changeset
|
1643 int mouse_char = ' '; |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1644 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1645 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1646 mouse_past_bottom = FALSE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1647 mouse_past_eol = FALSE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1648 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1649 if (flags & MOUSE_RELEASED) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1650 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1651 // On button release we may change window focus if positioned on a |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1652 // status line and no dragging happened. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1653 if (dragwin != NULL && !did_drag) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1654 flags &= ~(MOUSE_FOCUS | MOUSE_DID_MOVE); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1655 dragwin = NULL; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1656 did_drag = FALSE; |
18763
49b78d6465e5
patch 8.1.2371: FEAT_TEXT_PROP is a confusing name
Bram Moolenaar <Bram@vim.org>
parents:
18691
diff
changeset
|
1657 #ifdef FEAT_PROP_POPUP |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1658 if (click_in_popup_win != NULL && popup_dragwin == NULL) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1659 popup_close_for_mouse_click(click_in_popup_win); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1660 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1661 popup_dragwin = NULL; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1662 click_in_popup_win = NULL; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1663 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1664 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1665 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1666 if ((flags & MOUSE_DID_MOVE) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1667 && prev_row == mouse_row |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1668 && prev_col == mouse_col) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1669 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1670 retnomove: |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1671 // before moving the cursor for a left click which is NOT in a status |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1672 // line, stop Visual mode |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1673 if (on_status_line) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1674 return IN_STATUS_LINE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1675 if (on_sep_line) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1676 return IN_SEP_LINE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1677 #ifdef FEAT_MENU |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1678 if (in_winbar) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1679 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1680 // A quick second click may arrive as a double-click, but we use it |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1681 // as a second click in the WinBar. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1682 if ((mod_mask & MOD_MASK_MULTI_CLICK) && !(flags & MOUSE_RELEASED)) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1683 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1684 wp = mouse_find_win(&row, &col, FAIL_POPUP); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1685 if (wp == NULL) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1686 return IN_UNKNOWN; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1687 winbar_click(wp, col); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1688 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1689 return IN_OTHER_WIN | MOUSE_WINBAR; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1690 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1691 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1692 if (flags & MOUSE_MAY_STOP_VIS) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1693 { |
24788
b36ceac30454
patch 8.2.2932: select mode test fails
Bram Moolenaar <Bram@vim.org>
parents:
24784
diff
changeset
|
1694 end_visual_mode_keep_button(); |
29732
89e1d67814a9
patch 9.0.0206: redraw flags are not named specifically
Bram Moolenaar <Bram@vim.org>
parents:
29674
diff
changeset
|
1695 redraw_curbuf_later(UPD_INVERTED); // delete the inversion |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1696 } |
30645
101f08b49ed3
patch 9.0.0657: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents:
29841
diff
changeset
|
1697 #if defined(FEAT_CLIPBOARD) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1698 // Continue a modeless selection in another window. |
34194
a522c6c0127b
patch 9.1.0047: issues with temp curwin/buf while cmdwin is open
Christian Brabandt <cb@256bit.org>
parents:
33982
diff
changeset
|
1699 if (cmdwin_type != 0 && row < cmdwin_win->w_winrow) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1700 return IN_OTHER_WIN; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1701 #endif |
18763
49b78d6465e5
patch 8.1.2371: FEAT_TEXT_PROP is a confusing name
Bram Moolenaar <Bram@vim.org>
parents:
18691
diff
changeset
|
1702 #ifdef FEAT_PROP_POPUP |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1703 // Continue a modeless selection in a popup window or dragging it. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1704 if (in_popup_win) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1705 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1706 click_in_popup_win = NULL; // don't close it on release |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1707 if (popup_dragwin != NULL) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1708 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1709 // dragging a popup window |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1710 popup_drag(popup_dragwin); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1711 return IN_UNKNOWN; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1712 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1713 return IN_OTHER_WIN; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1714 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1715 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1716 return IN_BUFFER; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1717 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1718 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1719 prev_row = mouse_row; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1720 prev_col = mouse_col; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1721 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1722 if (flags & MOUSE_SETPOS) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1723 goto retnomove; // ugly goto... |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1724 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1725 old_curwin = curwin; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1726 old_cursor = curwin->w_cursor; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1727 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1728 if (!(flags & MOUSE_FOCUS)) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1729 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1730 if (row < 0 || col < 0) // check if it makes sense |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1731 return IN_UNKNOWN; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1732 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1733 // find the window where the row is in and adjust "row" and "col" to be |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1734 // relative to top-left of the window |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1735 wp = mouse_find_win(&row, &col, FIND_POPUP); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1736 if (wp == NULL) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1737 return IN_UNKNOWN; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1738 dragwin = NULL; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1739 |
18763
49b78d6465e5
patch 8.1.2371: FEAT_TEXT_PROP is a confusing name
Bram Moolenaar <Bram@vim.org>
parents:
18691
diff
changeset
|
1740 #ifdef FEAT_PROP_POPUP |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1741 // Click in a popup window may start dragging or modeless selection, |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1742 // but not much else. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1743 if (WIN_IS_POPUP(wp)) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1744 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1745 on_sep_line = 0; |
26300
0374f55a16be
patch 8.2.3681: cannot drag popup window after click on a status line
Bram Moolenaar <Bram@vim.org>
parents:
24788
diff
changeset
|
1746 on_status_line = 0; |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1747 in_popup_win = TRUE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1748 if (which_button == MOUSE_LEFT && popup_close_if_on_X(wp, row, col)) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1749 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1750 return IN_UNKNOWN; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1751 } |
26332
8b7f01b39d79
patch 8.2.3697: cannot drag a popup without a border
Bram Moolenaar <Bram@vim.org>
parents:
26300
diff
changeset
|
1752 else if (((wp->w_popup_flags & (POPF_DRAG | POPF_RESIZE)) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1753 && popup_on_border(wp, row, col)) |
26332
8b7f01b39d79
patch 8.2.3697: cannot drag a popup without a border
Bram Moolenaar <Bram@vim.org>
parents:
26300
diff
changeset
|
1754 || (wp->w_popup_flags & POPF_DRAGALL)) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1755 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1756 popup_dragwin = wp; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1757 popup_start_drag(wp, row, col); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1758 return IN_UNKNOWN; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1759 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1760 // Only close on release, otherwise it's not possible to drag or do |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1761 // modeless selection. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1762 else if (wp->w_popup_close == POPCLOSE_CLICK |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1763 && which_button == MOUSE_LEFT) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1764 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1765 click_in_popup_win = wp; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1766 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1767 else if (which_button == MOUSE_LEFT) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1768 // If the click is in the scrollbar, may scroll up/down. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1769 popup_handle_scrollbar_click(wp, row, col); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1770 # ifdef FEAT_CLIPBOARD |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1771 return IN_OTHER_WIN; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1772 # else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1773 return IN_UNKNOWN; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1774 # endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1775 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1776 in_popup_win = FALSE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1777 popup_dragwin = NULL; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1778 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1779 #ifdef FEAT_MENU |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1780 if (row == -1) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1781 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1782 // A click in the window toolbar does not enter another window or |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1783 // change Visual highlighting. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1784 winbar_click(wp, col); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1785 in_winbar = TRUE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1786 return IN_OTHER_WIN | MOUSE_WINBAR; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1787 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1788 in_winbar = FALSE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1789 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1790 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1791 // winpos and height may change in win_enter()! |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1792 if (row >= wp->w_height) // In (or below) status line |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1793 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1794 on_status_line = row - wp->w_height + 1; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1795 dragwin = wp; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1796 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1797 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1798 on_status_line = 0; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1799 if (col >= wp->w_width) // In separator line |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1800 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1801 on_sep_line = col - wp->w_width + 1; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1802 dragwin = wp; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1803 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1804 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1805 on_sep_line = 0; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1806 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1807 // The rightmost character of the status line might be a vertical |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1808 // separator character if there is no connecting window to the right. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1809 if (on_status_line && on_sep_line) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1810 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1811 if (stl_connected(wp)) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1812 on_sep_line = 0; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1813 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1814 on_status_line = 0; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1815 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1816 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1817 // Before jumping to another buffer, or moving the cursor for a left |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1818 // click, stop Visual mode. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1819 if (VIsual_active |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1820 && (wp->w_buffer != curwin->w_buffer |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1821 || (!on_status_line && !on_sep_line |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1822 #ifdef FEAT_FOLDING |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1823 && ( |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1824 # ifdef FEAT_RIGHTLEFT |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1825 wp->w_p_rl ? col < wp->w_width - wp->w_p_fdc : |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1826 # endif |
34194
a522c6c0127b
patch 9.1.0047: issues with temp curwin/buf while cmdwin is open
Christian Brabandt <cb@256bit.org>
parents:
33982
diff
changeset
|
1827 col >= wp->w_p_fdc + (wp != cmdwin_win ? 0 : 1) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1828 ) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1829 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1830 && (flags & MOUSE_MAY_STOP_VIS)))) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1831 { |
24788
b36ceac30454
patch 8.2.2932: select mode test fails
Bram Moolenaar <Bram@vim.org>
parents:
24784
diff
changeset
|
1832 end_visual_mode_keep_button(); |
29732
89e1d67814a9
patch 9.0.0206: redraw flags are not named specifically
Bram Moolenaar <Bram@vim.org>
parents:
29674
diff
changeset
|
1833 redraw_curbuf_later(UPD_INVERTED); // delete the inversion |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1834 } |
34194
a522c6c0127b
patch 9.1.0047: issues with temp curwin/buf while cmdwin is open
Christian Brabandt <cb@256bit.org>
parents:
33982
diff
changeset
|
1835 if (cmdwin_type != 0 && wp != cmdwin_win) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1836 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1837 // A click outside the command-line window: Use modeless |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1838 // selection if possible. Allow dragging the status lines. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1839 on_sep_line = 0; |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1840 #ifdef FEAT_CLIPBOARD |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1841 if (on_status_line) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1842 return IN_STATUS_LINE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1843 return IN_OTHER_WIN; |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1844 #else |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1845 row = 0; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1846 col += wp->w_wincol; |
34194
a522c6c0127b
patch 9.1.0047: issues with temp curwin/buf while cmdwin is open
Christian Brabandt <cb@256bit.org>
parents:
33982
diff
changeset
|
1847 wp = cmdwin_win; |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
1848 #endif |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1849 } |
19265
ce8c47ed54e5
patch 8.2.0191: cannot put a terminal in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
18763
diff
changeset
|
1850 #if defined(FEAT_PROP_POPUP) && defined(FEAT_TERMINAL) |
ce8c47ed54e5
patch 8.2.0191: cannot put a terminal in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
18763
diff
changeset
|
1851 if (popup_is_popup(curwin) && curbuf->b_term != NULL) |
ce8c47ed54e5
patch 8.2.0191: cannot put a terminal in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
18763
diff
changeset
|
1852 // terminal in popup window: don't jump to another window |
ce8c47ed54e5
patch 8.2.0191: cannot put a terminal in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
18763
diff
changeset
|
1853 return IN_OTHER_WIN; |
ce8c47ed54e5
patch 8.2.0191: cannot put a terminal in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
18763
diff
changeset
|
1854 #endif |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1855 // Only change window focus when not clicking on or dragging the |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1856 // status line. Do change focus when releasing the mouse button |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1857 // (MOUSE_FOCUS was set above if we dragged first). |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1858 if (dragwin == NULL || (flags & MOUSE_RELEASED)) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1859 win_enter(wp, TRUE); // can make wp invalid! |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1860 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1861 if (curwin != old_curwin) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1862 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1863 #ifdef CHECK_DOUBLE_CLICK |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1864 // set topline, to be able to check for double click ourselves |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1865 set_mouse_topline(curwin); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1866 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1867 #ifdef FEAT_TERMINAL |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1868 // when entering a terminal window may change state |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1869 term_win_entered(); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1870 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1871 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1872 if (on_status_line) // In (or below) status line |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1873 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1874 // Don't use start_arrow() if we're in the same window |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1875 if (curwin == old_curwin) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1876 return IN_STATUS_LINE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1877 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1878 return IN_STATUS_LINE | CURSOR_MOVED; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1879 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1880 if (on_sep_line) // In (or below) status line |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1881 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1882 // Don't use start_arrow() if we're in the same window |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1883 if (curwin == old_curwin) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1884 return IN_SEP_LINE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1885 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1886 return IN_SEP_LINE | CURSOR_MOVED; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1887 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1888 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1889 curwin->w_cursor.lnum = curwin->w_topline; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1890 #ifdef FEAT_GUI |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1891 // remember topline, needed for double click |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1892 gui_prev_topline = curwin->w_topline; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1893 # ifdef FEAT_DIFF |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1894 gui_prev_topfill = curwin->w_topfill; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1895 # endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1896 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1897 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1898 else if (on_status_line && which_button == MOUSE_LEFT) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1899 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1900 if (dragwin != NULL) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1901 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1902 // Drag the status line |
28923
2d726d5a6405
patch 8.2.4984: dragging statusline fails for window with winbar
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
1903 count = row - W_WINROW(dragwin) - dragwin->w_height + 1 |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1904 - on_status_line; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1905 win_drag_status_line(dragwin, count); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1906 did_drag |= count; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1907 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1908 return IN_STATUS_LINE; // Cursor didn't move |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1909 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1910 else if (on_sep_line && which_button == MOUSE_LEFT) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1911 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1912 if (dragwin != NULL) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1913 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1914 // Drag the separator column |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1915 count = col - dragwin->w_wincol - dragwin->w_width + 1 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1916 - on_sep_line; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1917 win_drag_vsep_line(dragwin, count); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1918 did_drag |= count; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1919 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1920 return IN_SEP_LINE; // Cursor didn't move |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1921 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1922 #ifdef FEAT_MENU |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1923 else if (in_winbar) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1924 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1925 // After a click on the window toolbar don't start Visual mode. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1926 return IN_OTHER_WIN | MOUSE_WINBAR; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1927 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1928 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1929 else // keep_window_focus must be TRUE |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1930 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1931 // before moving the cursor for a left click, stop Visual mode |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1932 if (flags & MOUSE_MAY_STOP_VIS) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1933 { |
24788
b36ceac30454
patch 8.2.2932: select mode test fails
Bram Moolenaar <Bram@vim.org>
parents:
24784
diff
changeset
|
1934 end_visual_mode_keep_button(); |
29732
89e1d67814a9
patch 9.0.0206: redraw flags are not named specifically
Bram Moolenaar <Bram@vim.org>
parents:
29674
diff
changeset
|
1935 redraw_curbuf_later(UPD_INVERTED); // delete the inversion |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1936 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1937 |
30645
101f08b49ed3
patch 9.0.0657: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents:
29841
diff
changeset
|
1938 #if defined(FEAT_CLIPBOARD) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1939 // Continue a modeless selection in another window. |
34194
a522c6c0127b
patch 9.1.0047: issues with temp curwin/buf while cmdwin is open
Christian Brabandt <cb@256bit.org>
parents:
33982
diff
changeset
|
1940 if (cmdwin_type != 0 && row < cmdwin_win->w_winrow) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1941 return IN_OTHER_WIN; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1942 #endif |
18763
49b78d6465e5
patch 8.1.2371: FEAT_TEXT_PROP is a confusing name
Bram Moolenaar <Bram@vim.org>
parents:
18691
diff
changeset
|
1943 #ifdef FEAT_PROP_POPUP |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1944 if (in_popup_win) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1945 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1946 if (popup_dragwin != NULL) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1947 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1948 // dragging a popup window |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1949 popup_drag(popup_dragwin); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1950 return IN_UNKNOWN; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1951 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1952 // continue a modeless selection in a popup window |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1953 click_in_popup_win = NULL; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1954 return IN_OTHER_WIN; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1955 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1956 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1957 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1958 row -= W_WINROW(curwin); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1959 col -= curwin->w_wincol; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1960 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1961 // When clicking beyond the end of the window, scroll the screen. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1962 // Scroll by however many rows outside the window we are. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1963 if (row < 0) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1964 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1965 count = 0; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1966 for (first = TRUE; curwin->w_topline > 1; ) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1967 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1968 #ifdef FEAT_DIFF |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1969 if (curwin->w_topfill < diff_check(curwin, curwin->w_topline)) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1970 ++count; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1971 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1972 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1973 count += plines(curwin->w_topline - 1); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1974 if (!first && count > -row) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1975 break; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1976 first = FALSE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1977 #ifdef FEAT_FOLDING |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1978 (void)hasFolding(curwin->w_topline, &curwin->w_topline, NULL); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1979 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1980 #ifdef FEAT_DIFF |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1981 if (curwin->w_topfill < diff_check(curwin, curwin->w_topline)) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1982 ++curwin->w_topfill; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1983 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1984 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1985 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1986 --curwin->w_topline; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1987 #ifdef FEAT_DIFF |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1988 curwin->w_topfill = 0; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1989 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1990 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1991 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1992 #ifdef FEAT_DIFF |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1993 check_topfill(curwin, FALSE); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1994 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1995 curwin->w_valid &= |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1996 ~(VALID_WROW|VALID_CROW|VALID_BOTLINE|VALID_BOTLINE_AP); |
29732
89e1d67814a9
patch 9.0.0206: redraw flags are not named specifically
Bram Moolenaar <Bram@vim.org>
parents:
29674
diff
changeset
|
1997 redraw_later(UPD_VALID); |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1998 row = 0; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1999 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2000 else if (row >= curwin->w_height) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2001 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2002 count = 0; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2003 for (first = TRUE; curwin->w_topline < curbuf->b_ml.ml_line_count; ) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2004 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2005 #ifdef FEAT_DIFF |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2006 if (curwin->w_topfill > 0) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2007 ++count; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2008 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2009 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2010 count += plines(curwin->w_topline); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2011 if (!first && count > row - curwin->w_height + 1) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2012 break; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2013 first = FALSE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2014 #ifdef FEAT_FOLDING |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2015 if (hasFolding(curwin->w_topline, NULL, &curwin->w_topline) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2016 && curwin->w_topline == curbuf->b_ml.ml_line_count) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2017 break; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2018 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2019 #ifdef FEAT_DIFF |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2020 if (curwin->w_topfill > 0) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2021 --curwin->w_topfill; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2022 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2023 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2024 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2025 ++curwin->w_topline; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2026 #ifdef FEAT_DIFF |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2027 curwin->w_topfill = |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2028 diff_check_fill(curwin, curwin->w_topline); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2029 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2030 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2031 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2032 #ifdef FEAT_DIFF |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2033 check_topfill(curwin, FALSE); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2034 #endif |
29732
89e1d67814a9
patch 9.0.0206: redraw flags are not named specifically
Bram Moolenaar <Bram@vim.org>
parents:
29674
diff
changeset
|
2035 redraw_later(UPD_VALID); |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2036 curwin->w_valid &= |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2037 ~(VALID_WROW|VALID_CROW|VALID_BOTLINE|VALID_BOTLINE_AP); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2038 row = curwin->w_height - 1; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2039 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2040 else if (row == 0) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2041 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2042 // When dragging the mouse, while the text has been scrolled up as |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2043 // far as it goes, moving the mouse in the top line should scroll |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2044 // the text down (done later when recomputing w_topline). |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2045 if (mouse_dragging > 0 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2046 && curwin->w_cursor.lnum |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2047 == curwin->w_buffer->b_ml.ml_line_count |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2048 && curwin->w_cursor.lnum == curwin->w_topline) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2049 curwin->w_valid &= ~(VALID_TOPLINE); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2050 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2051 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2052 |
33982
63341afcd329
patch 9.0.2177: Wrong cursor position when dragging out of window
Christian Brabandt <cb@256bit.org>
parents:
33575
diff
changeset
|
2053 if (prev_row >= W_WINROW(curwin) |
63341afcd329
patch 9.0.2177: Wrong cursor position when dragging out of window
Christian Brabandt <cb@256bit.org>
parents:
33575
diff
changeset
|
2054 && prev_row < W_WINROW(curwin) + curwin->w_height |
63341afcd329
patch 9.0.2177: Wrong cursor position when dragging out of window
Christian Brabandt <cb@256bit.org>
parents:
33575
diff
changeset
|
2055 && prev_col >= curwin->w_wincol && prev_col < W_ENDCOL(curwin) |
29413
34e93e046526
patch 9.0.0048: cursor in wrong column with mouse click after concealed text
Bram Moolenaar <Bram@vim.org>
parents:
29387
diff
changeset
|
2056 && ScreenLines != NULL) |
34e93e046526
patch 9.0.0048: cursor in wrong column with mouse click after concealed text
Bram Moolenaar <Bram@vim.org>
parents:
29387
diff
changeset
|
2057 { |
34e93e046526
patch 9.0.0048: cursor in wrong column with mouse click after concealed text
Bram Moolenaar <Bram@vim.org>
parents:
29387
diff
changeset
|
2058 int off = LineOffset[prev_row] + prev_col; |
34e93e046526
patch 9.0.0048: cursor in wrong column with mouse click after concealed text
Bram Moolenaar <Bram@vim.org>
parents:
29387
diff
changeset
|
2059 |
34e93e046526
patch 9.0.0048: cursor in wrong column with mouse click after concealed text
Bram Moolenaar <Bram@vim.org>
parents:
29387
diff
changeset
|
2060 // Only use ScreenCols[] after the window was redrawn. Mainly matters |
34e93e046526
patch 9.0.0048: cursor in wrong column with mouse click after concealed text
Bram Moolenaar <Bram@vim.org>
parents:
29387
diff
changeset
|
2061 // for tests, a user would not click before redrawing. |
29674
b11130c6e694
patch 9.0.0177: cursor position wrong with 'virtualedit' and mouse click
Bram Moolenaar <Bram@vim.org>
parents:
29591
diff
changeset
|
2062 // Do not use when 'virtualedit' is active. |
32824
22a08166a876
patch 9.0.1725: cursor pos wrong after concealed text with 'virtualedit'
Christian Brabandt <cb@256bit.org>
parents:
32009
diff
changeset
|
2063 if (curwin->w_redr_type <= UPD_VALID_NO_UPDATE) |
29413
34e93e046526
patch 9.0.0048: cursor in wrong column with mouse click after concealed text
Bram Moolenaar <Bram@vim.org>
parents:
29387
diff
changeset
|
2064 col_from_screen = ScreenCols[off]; |
34e93e046526
patch 9.0.0048: cursor in wrong column with mouse click after concealed text
Bram Moolenaar <Bram@vim.org>
parents:
29387
diff
changeset
|
2065 #ifdef FEAT_FOLDING |
34e93e046526
patch 9.0.0048: cursor in wrong column with mouse click after concealed text
Bram Moolenaar <Bram@vim.org>
parents:
29387
diff
changeset
|
2066 // Remember the character under the mouse, it might be a '-' or '+' in |
34e93e046526
patch 9.0.0048: cursor in wrong column with mouse click after concealed text
Bram Moolenaar <Bram@vim.org>
parents:
29387
diff
changeset
|
2067 // the fold column. |
34e93e046526
patch 9.0.0048: cursor in wrong column with mouse click after concealed text
Bram Moolenaar <Bram@vim.org>
parents:
29387
diff
changeset
|
2068 mouse_char = ScreenLines[off]; |
34e93e046526
patch 9.0.0048: cursor in wrong column with mouse click after concealed text
Bram Moolenaar <Bram@vim.org>
parents:
29387
diff
changeset
|
2069 #endif |
34e93e046526
patch 9.0.0048: cursor in wrong column with mouse click after concealed text
Bram Moolenaar <Bram@vim.org>
parents:
29387
diff
changeset
|
2070 } |
34e93e046526
patch 9.0.0048: cursor in wrong column with mouse click after concealed text
Bram Moolenaar <Bram@vim.org>
parents:
29387
diff
changeset
|
2071 |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2072 #ifdef FEAT_FOLDING |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2073 // Check for position outside of the fold column. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2074 if ( |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2075 # ifdef FEAT_RIGHTLEFT |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2076 curwin->w_p_rl ? col < curwin->w_width - curwin->w_p_fdc : |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2077 # endif |
34194
a522c6c0127b
patch 9.1.0047: issues with temp curwin/buf while cmdwin is open
Christian Brabandt <cb@256bit.org>
parents:
33982
diff
changeset
|
2078 col >= curwin->w_p_fdc + (cmdwin_win != curwin ? 0 : 1) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2079 ) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2080 mouse_char = ' '; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2081 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2082 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2083 // compute the position in the buffer line from the posn on the screen |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2084 if (mouse_comp_pos(curwin, &row, &col, &curwin->w_cursor.lnum, NULL)) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2085 mouse_past_bottom = TRUE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2086 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2087 // Start Visual mode before coladvance(), for when 'sel' != "old" |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2088 if ((flags & MOUSE_MAY_VIS) && !VIsual_active) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2089 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2090 check_visual_highlight(); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2091 VIsual = old_cursor; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2092 VIsual_active = TRUE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2093 VIsual_reselect = TRUE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2094 // if 'selectmode' contains "mouse", start Select mode |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2095 may_start_select('o'); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2096 setmouse(); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2097 if (p_smd && msg_silent == 0) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2098 redraw_cmdline = TRUE; // show visual mode later |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2099 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2100 |
34571
fdd232ab72ea
patch 9.1.0184: Cursor pos wrong when clicking with conceal and wrap
Christian Brabandt <cb@256bit.org>
parents:
34279
diff
changeset
|
2101 if (col_from_screen >= 0) |
29413
34e93e046526
patch 9.0.0048: cursor in wrong column with mouse click after concealed text
Bram Moolenaar <Bram@vim.org>
parents:
29387
diff
changeset
|
2102 { |
32824
22a08166a876
patch 9.0.1725: cursor pos wrong after concealed text with 'virtualedit'
Christian Brabandt <cb@256bit.org>
parents:
32009
diff
changeset
|
2103 // Use the virtual column from ScreenCols[], it is accurate also after |
22a08166a876
patch 9.0.1725: cursor pos wrong after concealed text with 'virtualedit'
Christian Brabandt <cb@256bit.org>
parents:
32009
diff
changeset
|
2104 // concealed characters. |
22a08166a876
patch 9.0.1725: cursor pos wrong after concealed text with 'virtualedit'
Christian Brabandt <cb@256bit.org>
parents:
32009
diff
changeset
|
2105 col = col_from_screen; |
29413
34e93e046526
patch 9.0.0048: cursor in wrong column with mouse click after concealed text
Bram Moolenaar <Bram@vim.org>
parents:
29387
diff
changeset
|
2106 } |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2107 |
32824
22a08166a876
patch 9.0.1725: cursor pos wrong after concealed text with 'virtualedit'
Christian Brabandt <cb@256bit.org>
parents:
32009
diff
changeset
|
2108 curwin->w_curswant = col; |
22a08166a876
patch 9.0.1725: cursor pos wrong after concealed text with 'virtualedit'
Christian Brabandt <cb@256bit.org>
parents:
32009
diff
changeset
|
2109 curwin->w_set_curswant = FALSE; // May still have been TRUE |
22a08166a876
patch 9.0.1725: cursor pos wrong after concealed text with 'virtualedit'
Christian Brabandt <cb@256bit.org>
parents:
32009
diff
changeset
|
2110 if (coladvance(col) == FAIL) // Mouse click beyond end of line |
22a08166a876
patch 9.0.1725: cursor pos wrong after concealed text with 'virtualedit'
Christian Brabandt <cb@256bit.org>
parents:
32009
diff
changeset
|
2111 { |
22a08166a876
patch 9.0.1725: cursor pos wrong after concealed text with 'virtualedit'
Christian Brabandt <cb@256bit.org>
parents:
32009
diff
changeset
|
2112 if (inclusive != NULL) |
22a08166a876
patch 9.0.1725: cursor pos wrong after concealed text with 'virtualedit'
Christian Brabandt <cb@256bit.org>
parents:
32009
diff
changeset
|
2113 *inclusive = TRUE; |
22a08166a876
patch 9.0.1725: cursor pos wrong after concealed text with 'virtualedit'
Christian Brabandt <cb@256bit.org>
parents:
32009
diff
changeset
|
2114 mouse_past_eol = TRUE; |
22a08166a876
patch 9.0.1725: cursor pos wrong after concealed text with 'virtualedit'
Christian Brabandt <cb@256bit.org>
parents:
32009
diff
changeset
|
2115 } |
22a08166a876
patch 9.0.1725: cursor pos wrong after concealed text with 'virtualedit'
Christian Brabandt <cb@256bit.org>
parents:
32009
diff
changeset
|
2116 else if (inclusive != NULL) |
22a08166a876
patch 9.0.1725: cursor pos wrong after concealed text with 'virtualedit'
Christian Brabandt <cb@256bit.org>
parents:
32009
diff
changeset
|
2117 *inclusive = FALSE; |
22a08166a876
patch 9.0.1725: cursor pos wrong after concealed text with 'virtualedit'
Christian Brabandt <cb@256bit.org>
parents:
32009
diff
changeset
|
2118 |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2119 count = IN_BUFFER; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2120 if (curwin != old_curwin || curwin->w_cursor.lnum != old_cursor.lnum |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2121 || curwin->w_cursor.col != old_cursor.col) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2122 count |= CURSOR_MOVED; // Cursor has moved |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2123 |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2124 #ifdef FEAT_FOLDING |
29387
9dce192d1ac2
patch 9.0.0036: 'fillchars' cannot have window-local values
Bram Moolenaar <Bram@vim.org>
parents:
29175
diff
changeset
|
2125 if (mouse_char == curwin->w_fill_chars.foldclosed) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2126 count |= MOUSE_FOLD_OPEN; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2127 else if (mouse_char != ' ') |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2128 count |= MOUSE_FOLD_CLOSE; |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2129 #endif |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2130 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2131 return count; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2132 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2133 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2134 /* |
31103
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2135 * Make a horizontal scroll to "leftcol". |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2136 * Return TRUE if the cursor moved, FALSE otherwise. |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2137 */ |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2138 int |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2139 do_mousescroll_horiz(long_u leftcol) |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2140 { |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2141 if (curwin->w_p_wrap) |
33223
def9fc5c92d1
patch 9.0.1886: Various Typos
Christian Brabandt <cb@256bit.org>
parents:
32824
diff
changeset
|
2142 return FALSE; // no horizontal scrolling when wrapping |
31103
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2143 |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2144 if (curwin->w_leftcol == (colnr_T)leftcol) |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2145 return FALSE; // already there |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2146 |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2147 // When the line of the cursor is too short, move the cursor to the |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2148 // longest visible line. |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2149 if ( |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2150 #ifdef FEAT_GUI |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2151 (!gui.in_use || vim_strchr(p_go, GO_HORSCROLL) == NULL) && |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2152 #endif |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2153 !virtual_active() |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2154 && (long)leftcol > scroll_line_len(curwin->w_cursor.lnum)) |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2155 { |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2156 curwin->w_cursor.lnum = ui_find_longest_lnum(); |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2157 curwin->w_cursor.col = 0; |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2158 } |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2159 |
31133
cc0c4141fb73
patch 9.0.0901: setting w_leftcol and handling side effects is confusing
Bram Moolenaar <Bram@vim.org>
parents:
31103
diff
changeset
|
2160 return set_leftcol((colnr_T)leftcol); |
31103
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2161 } |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2162 |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2163 /* |
31144
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
2164 * Normal and Visual modes implementation for scrolling in direction |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
2165 * "cap->arg", which is one of the MSCR_ values. |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2166 */ |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2167 void |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2168 nv_mousescroll(cmdarg_T *cap) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2169 { |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2170 win_T *old_curwin = curwin; |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2171 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2172 if (mouse_row >= 0 && mouse_col >= 0) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2173 { |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2174 // Find the window at the mouse pointer coordinates. |
31144
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
2175 // NOTE: Must restore "curwin" to "old_curwin" before returning! |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2176 int row = mouse_row; |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2177 int col = mouse_col; |
31144
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
2178 curwin = mouse_find_win(&row, &col, FIND_POPUP); |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
2179 if (curwin == NULL) |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
2180 { |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
2181 curwin = old_curwin; |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2182 return; |
31144
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
2183 } |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
2184 |
18763
49b78d6465e5
patch 8.1.2371: FEAT_TEXT_PROP is a confusing name
Bram Moolenaar <Bram@vim.org>
parents:
18691
diff
changeset
|
2185 #ifdef FEAT_PROP_POPUP |
31144
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
2186 if (WIN_IS_POPUP(curwin) && !curwin->w_has_scrollbar) |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
2187 { |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2188 // cannot scroll this popup window |
31144
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
2189 curwin = old_curwin; |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2190 return; |
31144
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
2191 } |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2192 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2193 curbuf = curwin->w_buffer; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2194 } |
31103
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2195 |
31144
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
2196 // Call the common mouse scroll function shared with other modes. |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
2197 do_mousescroll(cap); |
31103
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2198 |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2199 curwin->w_redr_status = TRUE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2200 curwin = old_curwin; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2201 curbuf = curwin->w_buffer; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2202 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2203 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2204 /* |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2205 * Mouse clicks and drags. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2206 */ |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2207 void |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2208 nv_mouse(cmdarg_T *cap) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2209 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2210 (void)do_mouse(cap->oap, cap->cmdchar, BACKWARD, cap->count1, 0); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2211 } |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2212 |
24784
288565c9b4e0
patch 8.2.2930: when a popup is visible a mouse move my restart Visual mode
Bram Moolenaar <Bram@vim.org>
parents:
23964
diff
changeset
|
2213 static int held_button = MOUSE_RELEASE; |
288565c9b4e0
patch 8.2.2930: when a popup is visible a mouse move my restart Visual mode
Bram Moolenaar <Bram@vim.org>
parents:
23964
diff
changeset
|
2214 |
288565c9b4e0
patch 8.2.2930: when a popup is visible a mouse move my restart Visual mode
Bram Moolenaar <Bram@vim.org>
parents:
23964
diff
changeset
|
2215 void |
32009
4545f58c8490
patch 9.0.1336: functions without arguments are not always declared properly
Bram Moolenaar <Bram@vim.org>
parents:
31194
diff
changeset
|
2216 reset_held_button(void) |
24784
288565c9b4e0
patch 8.2.2930: when a popup is visible a mouse move my restart Visual mode
Bram Moolenaar <Bram@vim.org>
parents:
23964
diff
changeset
|
2217 { |
288565c9b4e0
patch 8.2.2930: when a popup is visible a mouse move my restart Visual mode
Bram Moolenaar <Bram@vim.org>
parents:
23964
diff
changeset
|
2218 held_button = MOUSE_RELEASE; |
288565c9b4e0
patch 8.2.2930: when a popup is visible a mouse move my restart Visual mode
Bram Moolenaar <Bram@vim.org>
parents:
23964
diff
changeset
|
2219 } |
288565c9b4e0
patch 8.2.2930: when a popup is visible a mouse move my restart Visual mode
Bram Moolenaar <Bram@vim.org>
parents:
23964
diff
changeset
|
2220 |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2221 /* |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2222 * Check if typebuf 'tp' contains a terminal mouse code and returns the |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2223 * modifiers found in typebuf in 'modifiers'. |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2224 */ |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2225 int |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2226 check_termcode_mouse( |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2227 char_u *tp, |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2228 int *slen, |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2229 char_u *key_name, |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2230 char_u *modifiers_start, |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2231 int idx, |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2232 int *modifiers) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2233 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2234 int j; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2235 char_u *p; |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2236 #if !defined(UNIX) || defined(FEAT_MOUSE_XTERM) || defined(FEAT_GUI) \ |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2237 || defined(FEAT_MOUSE_GPM) || defined(FEAT_SYSMOUSE) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2238 char_u bytes[6]; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2239 int num_bytes; |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2240 #endif |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2241 int mouse_code = 0; // init for GCC |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2242 int is_click, is_drag; |
21114
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2243 int is_release, release_is_ambiguous; |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2244 int wheel_code = 0; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2245 int current_button; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2246 static int orig_num_clicks = 1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2247 static int orig_mouse_code = 0x0; |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2248 #ifdef CHECK_DOUBLE_CLICK |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2249 static int orig_mouse_col = 0; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2250 static int orig_mouse_row = 0; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2251 static struct timeval orig_mouse_time = {0, 0}; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2252 // time of previous mouse click |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2253 struct timeval mouse_time; // time of current mouse click |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2254 long timediff; // elapsed time in msec |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2255 #endif |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2256 |
21114
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2257 is_click = is_drag = is_release = release_is_ambiguous = FALSE; |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2258 |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2259 #if !defined(UNIX) || defined(FEAT_MOUSE_XTERM) || defined(FEAT_GUI) \ |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2260 || defined(FEAT_MOUSE_GPM) || defined(FEAT_SYSMOUSE) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2261 if (key_name[0] == KS_MOUSE |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2262 # ifdef FEAT_MOUSE_GPM |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2263 || key_name[0] == KS_GPM_MOUSE |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2264 # endif |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2265 ) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2266 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2267 /* |
21271
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2268 * For xterm we get "<t_mouse>scr", where s == encoded button state: |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2269 * 0x20 = left button down |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2270 * 0x21 = middle button down |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2271 * 0x22 = right button down |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2272 * 0x23 = any button release |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2273 * 0x60 = button 4 down (scroll wheel down) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2274 * 0x61 = button 5 down (scroll wheel up) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2275 * add 0x04 for SHIFT |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2276 * add 0x08 for ALT |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2277 * add 0x10 for CTRL |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2278 * add 0x20 for mouse drag (0x40 is drag with left button) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2279 * add 0x40 for mouse move (0x80 is move, 0x81 too) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2280 * 0x43 (drag + release) is also move |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2281 * c == column + ' ' + 1 == column + 33 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2282 * r == row + ' ' + 1 == row + 33 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2283 * |
21271
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2284 * The coordinates are passed on through global variables. Ugly, but |
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2285 * this avoids trouble with mouse clicks at an unexpected moment and |
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2286 * allows for mapping them. |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2287 */ |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2288 for (;;) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2289 { |
31194
fa26d002eb2a
patch 9.0.0931: MS-Windows: mouse column limited to 223
Bram Moolenaar <Bram@vim.org>
parents:
31166
diff
changeset
|
2290 // For the GUI and for MS-Windows two bytes each are used for row |
fa26d002eb2a
patch 9.0.0931: MS-Windows: mouse column limited to 223
Bram Moolenaar <Bram@vim.org>
parents:
31166
diff
changeset
|
2291 // and column. Allows for more than 223 columns. |
fa26d002eb2a
patch 9.0.0931: MS-Windows: mouse column limited to 223
Bram Moolenaar <Bram@vim.org>
parents:
31166
diff
changeset
|
2292 # if defined(FEAT_GUI) || defined(MSWIN) |
fa26d002eb2a
patch 9.0.0931: MS-Windows: mouse column limited to 223
Bram Moolenaar <Bram@vim.org>
parents:
31166
diff
changeset
|
2293 if (TRUE |
fa26d002eb2a
patch 9.0.0931: MS-Windows: mouse column limited to 223
Bram Moolenaar <Bram@vim.org>
parents:
31166
diff
changeset
|
2294 # if defined(FEAT_GUI) && !defined(MSWIN) |
fa26d002eb2a
patch 9.0.0931: MS-Windows: mouse column limited to 223
Bram Moolenaar <Bram@vim.org>
parents:
31166
diff
changeset
|
2295 && gui.in_use |
fa26d002eb2a
patch 9.0.0931: MS-Windows: mouse column limited to 223
Bram Moolenaar <Bram@vim.org>
parents:
31166
diff
changeset
|
2296 # endif |
fa26d002eb2a
patch 9.0.0931: MS-Windows: mouse column limited to 223
Bram Moolenaar <Bram@vim.org>
parents:
31166
diff
changeset
|
2297 ) |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2298 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2299 num_bytes = get_bytes_from_buf(tp + *slen, bytes, 5); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2300 if (num_bytes == -1) // not enough coordinates |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2301 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2302 mouse_code = bytes[0]; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2303 mouse_col = 128 * (bytes[1] - ' ' - 1) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2304 + bytes[2] - ' ' - 1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2305 mouse_row = 128 * (bytes[3] - ' ' - 1) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2306 + bytes[4] - ' ' - 1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2307 } |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2308 else |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2309 # endif |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2310 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2311 num_bytes = get_bytes_from_buf(tp + *slen, bytes, 3); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2312 if (num_bytes == -1) // not enough coordinates |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2313 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2314 mouse_code = bytes[0]; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2315 mouse_col = bytes[1] - ' ' - 1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2316 mouse_row = bytes[2] - ' ' - 1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2317 } |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2318 *slen += num_bytes; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2319 |
21271
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2320 // If the following bytes is also a mouse code and it has the same |
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2321 // code, dump this one and get the next. This makes dragging a |
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2322 // whole lot faster. |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2323 # ifdef FEAT_GUI |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2324 if (gui.in_use) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2325 j = 3; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2326 else |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2327 # endif |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2328 j = get_termcode_len(idx); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2329 if (STRNCMP(tp, tp + *slen, (size_t)j) == 0 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2330 && tp[*slen + j] == mouse_code |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2331 && tp[*slen + j + 1] != NUL |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2332 && tp[*slen + j + 2] != NUL |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2333 # ifdef FEAT_GUI |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2334 && (!gui.in_use |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2335 || (tp[*slen + j + 3] != NUL |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2336 && tp[*slen + j + 4] != NUL)) |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2337 # endif |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2338 ) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2339 *slen += j; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2340 else |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2341 break; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2342 } |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2343 } |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2344 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2345 if (key_name[0] == KS_URXVT_MOUSE |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2346 || key_name[0] == KS_SGR_MOUSE |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2347 || key_name[0] == KS_SGR_MOUSE_RELEASE) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2348 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2349 // URXVT 1015 mouse reporting mode: |
21271
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2350 // Almost identical to xterm mouse mode, except the values are decimal |
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2351 // instead of bytes. |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2352 // |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2353 // \033[%d;%d;%dM |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2354 // ^-- row |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2355 // ^----- column |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2356 // ^-------- code |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2357 // |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2358 // SGR 1006 mouse reporting mode: |
21271
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2359 // Almost identical to xterm mouse mode, except the values are decimal |
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2360 // instead of bytes. |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2361 // |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2362 // \033[<%d;%d;%dM |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2363 // ^-- row |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2364 // ^----- column |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2365 // ^-------- code |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2366 // |
28809
d0241e74bfdb
patch 8.2.4928: various white space and cosmetic mistakes
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2367 // \033[<%d;%d;%dm : mouse release event |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2368 // ^-- row |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2369 // ^----- column |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2370 // ^-------- code |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2371 p = modifiers_start; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2372 if (p == NULL) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2373 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2374 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2375 mouse_code = getdigits(&p); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2376 if (*p++ != ';') |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2377 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2378 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2379 // when mouse reporting is SGR, add 32 to mouse code |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2380 if (key_name[0] == KS_SGR_MOUSE |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2381 || key_name[0] == KS_SGR_MOUSE_RELEASE) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2382 mouse_code += 32; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2383 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2384 mouse_col = getdigits(&p) - 1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2385 if (*p++ != ';') |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2386 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2387 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2388 mouse_row = getdigits(&p) - 1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2389 |
21271
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2390 // The modifiers were the mouse coordinates, not the modifier keys |
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2391 // (alt/shift/ctrl/meta) state. |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2392 *modifiers = 0; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2393 } |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2394 |
21114
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2395 if (key_name[0] == KS_SGR_MOUSE |
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2396 || key_name[0] == KS_SGR_MOUSE_RELEASE) |
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2397 { |
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2398 if (key_name[0] == KS_SGR_MOUSE_RELEASE) |
21271
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2399 { |
21114
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2400 is_release = TRUE; |
21271
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2401 // This is used below to set held_button. |
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2402 mouse_code |= MOUSE_RELEASE; |
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2403 } |
21114
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2404 } |
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2405 else |
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2406 { |
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2407 release_is_ambiguous = TRUE; |
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2408 if ((mouse_code & MOUSE_RELEASE) == MOUSE_RELEASE) |
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2409 is_release = TRUE; |
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2410 } |
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2411 |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2412 if (key_name[0] == KS_MOUSE |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2413 # ifdef FEAT_MOUSE_GPM |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2414 || key_name[0] == KS_GPM_MOUSE |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2415 # endif |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2416 # ifdef FEAT_MOUSE_URXVT |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2417 || key_name[0] == KS_URXVT_MOUSE |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2418 # endif |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2419 || key_name[0] == KS_SGR_MOUSE |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2420 || key_name[0] == KS_SGR_MOUSE_RELEASE) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2421 { |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2422 # if !defined(MSWIN) |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2423 /* |
21271
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2424 * Handle old style mouse events. |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2425 * Recognize the xterm mouse wheel, but not in the GUI, the |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2426 * Linux console with GPM and the MS-DOS or Win32 console |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2427 * (multi-clicks use >= 0x60). |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2428 */ |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2429 if (mouse_code >= MOUSEWHEEL_LOW |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2430 # ifdef FEAT_GUI |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2431 && !gui.in_use |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2432 # endif |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2433 # ifdef FEAT_MOUSE_GPM |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2434 && key_name[0] != KS_GPM_MOUSE |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2435 # endif |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2436 ) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2437 { |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2438 # if defined(UNIX) |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2439 if (use_xterm_mouse() > 1 && mouse_code >= 0x80) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2440 // mouse-move event, using MOUSE_DRAG works |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2441 mouse_code = MOUSE_DRAG; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2442 else |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2443 # endif |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2444 // Keep the mouse_code before it's changed, so that we |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2445 // remember that it was a mouse wheel click. |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2446 wheel_code = mouse_code; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2447 } |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2448 # ifdef FEAT_MOUSE_XTERM |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2449 else if (held_button == MOUSE_RELEASE |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2450 # ifdef FEAT_GUI |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2451 && !gui.in_use |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2452 # endif |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2453 && (mouse_code == 0x23 || mouse_code == 0x24 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2454 || mouse_code == 0x40 || mouse_code == 0x41)) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2455 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2456 // Apparently 0x23 and 0x24 are used by rxvt scroll wheel. |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2457 // And 0x40 and 0x41 are used by some xterm emulator. |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2458 wheel_code = mouse_code - (mouse_code >= 0x40 ? 0x40 : 0x23) |
29591
eb07470d0395
patch 9.0.0136: after CTRL-Left-mouse click a mouse scroll also has CTRL
Bram Moolenaar <Bram@vim.org>
parents:
29451
diff
changeset
|
2459 + MOUSEWHEEL_LOW; |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2460 } |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2461 # endif |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2462 |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2463 # if defined(UNIX) |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2464 else if (use_xterm_mouse() > 1) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2465 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2466 if (mouse_code & MOUSE_DRAG_XTERM) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2467 mouse_code |= MOUSE_DRAG; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2468 } |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2469 # endif |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2470 # ifdef FEAT_XCLIPBOARD |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2471 else if (!(mouse_code & MOUSE_DRAG & ~MOUSE_CLICK_MASK)) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2472 { |
21114
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2473 if (is_release) |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2474 stop_xterm_trace(); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2475 else |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2476 start_xterm_trace(mouse_code); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2477 } |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2478 # endif |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2479 # endif |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2480 } |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2481 #endif // !UNIX || FEAT_MOUSE_XTERM |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2482 #ifdef FEAT_MOUSE_NET |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2483 if (key_name[0] == KS_NETTERM_MOUSE) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2484 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2485 int mc, mr; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2486 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2487 // expect a rather limited sequence like: balancing { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2488 // \033}6,45\r |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2489 // '6' is the row, 45 is the column |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2490 p = tp + *slen; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2491 mr = getdigits(&p); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2492 if (*p++ != ',') |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2493 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2494 mc = getdigits(&p); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2495 if (*p++ != '\r') |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2496 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2497 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2498 mouse_col = mc - 1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2499 mouse_row = mr - 1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2500 mouse_code = MOUSE_LEFT; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2501 *slen += (int)(p - (tp + *slen)); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2502 } |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2503 #endif // FEAT_MOUSE_NET |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2504 #ifdef FEAT_MOUSE_JSB |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2505 if (key_name[0] == KS_JSBTERM_MOUSE) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2506 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2507 int mult, val, iter, button, status; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2508 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2509 /* |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2510 * JSBTERM Input Model |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2511 * \033[0~zw uniq escape sequence |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2512 * (L-x) Left button pressed - not pressed x not reporting |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2513 * (M-x) Middle button pressed - not pressed x not reporting |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2514 * (R-x) Right button pressed - not pressed x not reporting |
21271
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2515 * (SDmdu) Single , Double click, m: mouse move, d: button down, |
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2516 * u: button up |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2517 * ### X cursor position padded to 3 digits |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2518 * ### Y cursor position padded to 3 digits |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2519 * (s-x) SHIFT key pressed - not pressed x not reporting |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2520 * (c-x) CTRL key pressed - not pressed x not reporting |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2521 * \033\\ terminating sequence |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2522 */ |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2523 p = tp + *slen; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2524 button = mouse_code = 0; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2525 switch (*p++) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2526 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2527 case 'L': button = 1; break; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2528 case '-': break; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2529 case 'x': break; // ignore sequence |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2530 default: return -1; // Unknown Result |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2531 } |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2532 switch (*p++) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2533 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2534 case 'M': button |= 2; break; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2535 case '-': break; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2536 case 'x': break; // ignore sequence |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2537 default: return -1; // Unknown Result |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2538 } |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2539 switch (*p++) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2540 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2541 case 'R': button |= 4; break; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2542 case '-': break; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2543 case 'x': break; // ignore sequence |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2544 default: return -1; // Unknown Result |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2545 } |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2546 status = *p++; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2547 for (val = 0, mult = 100, iter = 0; iter < 3; iter++, |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2548 mult /= 10, p++) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2549 if (*p >= '0' && *p <= '9') |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2550 val += (*p - '0') * mult; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2551 else |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2552 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2553 mouse_col = val; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2554 for (val = 0, mult = 100, iter = 0; iter < 3; iter++, |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2555 mult /= 10, p++) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2556 if (*p >= '0' && *p <= '9') |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2557 val += (*p - '0') * mult; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2558 else |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2559 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2560 mouse_row = val; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2561 switch (*p++) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2562 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2563 case 's': button |= 8; break; // SHIFT key Pressed |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2564 case '-': break; // Not Pressed |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2565 case 'x': break; // Not Reporting |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2566 default: return -1; // Unknown Result |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2567 } |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2568 switch (*p++) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2569 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2570 case 'c': button |= 16; break; // CTRL key Pressed |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2571 case '-': break; // Not Pressed |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2572 case 'x': break; // Not Reporting |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2573 default: return -1; // Unknown Result |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2574 } |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2575 if (*p++ != '\033') |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2576 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2577 if (*p++ != '\\') |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2578 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2579 switch (status) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2580 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2581 case 'D': // Double Click |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2582 case 'S': // Single Click |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2583 if (button & 1) mouse_code |= MOUSE_LEFT; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2584 if (button & 2) mouse_code |= MOUSE_MIDDLE; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2585 if (button & 4) mouse_code |= MOUSE_RIGHT; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2586 if (button & 8) mouse_code |= MOUSE_SHIFT; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2587 if (button & 16) mouse_code |= MOUSE_CTRL; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2588 break; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2589 case 'm': // Mouse move |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2590 if (button & 1) mouse_code |= MOUSE_LEFT; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2591 if (button & 2) mouse_code |= MOUSE_MIDDLE; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2592 if (button & 4) mouse_code |= MOUSE_RIGHT; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2593 if (button & 8) mouse_code |= MOUSE_SHIFT; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2594 if (button & 16) mouse_code |= MOUSE_CTRL; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2595 if ((button & 7) != 0) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2596 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2597 held_button = mouse_code; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2598 mouse_code |= MOUSE_DRAG; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2599 } |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2600 is_drag = TRUE; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2601 showmode(); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2602 break; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2603 case 'd': // Button Down |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2604 if (button & 1) mouse_code |= MOUSE_LEFT; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2605 if (button & 2) mouse_code |= MOUSE_MIDDLE; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2606 if (button & 4) mouse_code |= MOUSE_RIGHT; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2607 if (button & 8) mouse_code |= MOUSE_SHIFT; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2608 if (button & 16) mouse_code |= MOUSE_CTRL; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2609 break; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2610 case 'u': // Button Up |
21114
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2611 is_release = TRUE; |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2612 if (button & 1) |
21114
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2613 mouse_code |= MOUSE_LEFT; |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2614 if (button & 2) |
21114
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2615 mouse_code |= MOUSE_MIDDLE; |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2616 if (button & 4) |
21114
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2617 mouse_code |= MOUSE_RIGHT; |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2618 if (button & 8) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2619 mouse_code |= MOUSE_SHIFT; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2620 if (button & 16) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2621 mouse_code |= MOUSE_CTRL; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2622 break; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2623 default: return -1; // Unknown Result |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2624 } |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2625 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2626 *slen += (p - (tp + *slen)); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2627 } |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2628 #endif // FEAT_MOUSE_JSB |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2629 #ifdef FEAT_MOUSE_DEC |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2630 if (key_name[0] == KS_DEC_MOUSE) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2631 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2632 /* |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2633 * The DEC Locator Input Model |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2634 * Netterm delivers the code sequence: |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2635 * \033[2;4;24;80&w (left button down) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2636 * \033[3;0;24;80&w (left button up) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2637 * \033[6;1;24;80&w (right button down) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2638 * \033[7;0;24;80&w (right button up) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2639 * CSI Pe ; Pb ; Pr ; Pc ; Pp & w |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2640 * Pe is the event code |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2641 * Pb is the button code |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2642 * Pr is the row coordinate |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2643 * Pc is the column coordinate |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2644 * Pp is the third coordinate (page number) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2645 * Pe, the event code indicates what event caused this report |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2646 * The following event codes are defined: |
21271
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2647 * 0 - request, the terminal received an explicit request for a |
28809
d0241e74bfdb
patch 8.2.4928: various white space and cosmetic mistakes
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2648 * locator report, but the locator is unavailable |
21271
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2649 * 1 - request, the terminal received an explicit request for a |
28809
d0241e74bfdb
patch 8.2.4928: various white space and cosmetic mistakes
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2650 * locator report |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2651 * 2 - left button down |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2652 * 3 - left button up |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2653 * 4 - middle button down |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2654 * 5 - middle button up |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2655 * 6 - right button down |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2656 * 7 - right button up |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2657 * 8 - fourth button down |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2658 * 9 - fourth button up |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2659 * 10 - locator outside filter rectangle |
21271
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2660 * Pb, the button code, ASCII decimal 0-15 indicating which buttons are |
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2661 * down if any. The state of the four buttons on the locator |
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2662 * correspond to the low four bits of the decimal value, "1" means |
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2663 * button depressed |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2664 * 0 - no buttons down, |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2665 * 1 - right, |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2666 * 2 - middle, |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2667 * 4 - left, |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2668 * 8 - fourth |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2669 * Pr is the row coordinate of the locator position in the page, |
21271
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2670 * encoded as an ASCII decimal value. If Pr is omitted, the locator |
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2671 * position is undefined (outside the terminal window for example). |
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2672 * Pc is the column coordinate of the locator position in the page, |
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2673 * encoded as an ASCII decimal value. If Pc is omitted, the locator |
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2674 * position is undefined (outside the terminal window for example). |
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2675 * Pp is the page coordinate of the locator position encoded as an |
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2676 * ASCII decimal value. The page coordinate may be omitted if the |
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2677 * locator is on page one (the default). We ignore it anyway. |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2678 */ |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2679 int Pe, Pb, Pr, Pc; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2680 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2681 p = tp + *slen; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2682 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2683 // get event status |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2684 Pe = getdigits(&p); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2685 if (*p++ != ';') |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2686 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2687 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2688 // get button status |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2689 Pb = getdigits(&p); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2690 if (*p++ != ';') |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2691 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2692 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2693 // get row status |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2694 Pr = getdigits(&p); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2695 if (*p++ != ';') |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2696 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2697 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2698 // get column status |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2699 Pc = getdigits(&p); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2700 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2701 // the page parameter is optional |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2702 if (*p == ';') |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2703 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2704 p++; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2705 (void)getdigits(&p); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2706 } |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2707 if (*p++ != '&') |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2708 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2709 if (*p++ != 'w') |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2710 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2711 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2712 mouse_code = 0; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2713 switch (Pe) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2714 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2715 case 0: return -1; // position request while unavailable |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2716 case 1: // a response to a locator position request includes |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2717 // the status of all buttons |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2718 Pb &= 7; // mask off and ignore fourth button |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2719 if (Pb & 4) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2720 mouse_code = MOUSE_LEFT; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2721 if (Pb & 2) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2722 mouse_code = MOUSE_MIDDLE; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2723 if (Pb & 1) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2724 mouse_code = MOUSE_RIGHT; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2725 if (Pb) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2726 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2727 held_button = mouse_code; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2728 mouse_code |= MOUSE_DRAG; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2729 WantQueryMouse = TRUE; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2730 } |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2731 is_drag = TRUE; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2732 showmode(); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2733 break; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2734 case 2: mouse_code = MOUSE_LEFT; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2735 WantQueryMouse = TRUE; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2736 break; |
21114
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2737 case 3: mouse_code = MOUSE_LEFT; |
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2738 is_release = TRUE; |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2739 break; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2740 case 4: mouse_code = MOUSE_MIDDLE; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2741 WantQueryMouse = TRUE; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2742 break; |
21114
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2743 case 5: mouse_code = MOUSE_MIDDLE; |
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2744 is_release = TRUE; |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2745 break; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2746 case 6: mouse_code = MOUSE_RIGHT; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2747 WantQueryMouse = TRUE; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2748 break; |
21114
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2749 case 7: mouse_code = MOUSE_RIGHT; |
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2750 is_release = TRUE; |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2751 break; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2752 case 8: return -1; // fourth button down |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2753 case 9: return -1; // fourth button up |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2754 case 10: return -1; // mouse outside of filter rectangle |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2755 default: return -1; // should never occur |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2756 } |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2757 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2758 mouse_col = Pc - 1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2759 mouse_row = Pr - 1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2760 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2761 *slen += (int)(p - (tp + *slen)); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2762 } |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2763 #endif // FEAT_MOUSE_DEC |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2764 #ifdef FEAT_MOUSE_PTERM |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2765 if (key_name[0] == KS_PTERM_MOUSE) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2766 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2767 int button, num_clicks, action; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2768 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2769 p = tp + *slen; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2770 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2771 action = getdigits(&p); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2772 if (*p++ != ';') |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2773 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2774 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2775 mouse_row = getdigits(&p); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2776 if (*p++ != ';') |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2777 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2778 mouse_col = getdigits(&p); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2779 if (*p++ != ';') |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2780 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2781 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2782 button = getdigits(&p); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2783 mouse_code = 0; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2784 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2785 switch (button) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2786 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2787 case 4: mouse_code = MOUSE_LEFT; break; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2788 case 1: mouse_code = MOUSE_RIGHT; break; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2789 case 2: mouse_code = MOUSE_MIDDLE; break; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2790 default: return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2791 } |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2792 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2793 switch (action) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2794 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2795 case 31: // Initial press |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2796 if (*p++ != ';') |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2797 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2798 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2799 num_clicks = getdigits(&p); // Not used |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2800 break; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2801 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2802 case 32: // Release |
21114
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2803 is_release = TRUE; |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2804 break; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2805 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2806 case 33: // Drag |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2807 held_button = mouse_code; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2808 mouse_code |= MOUSE_DRAG; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2809 break; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2810 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2811 default: |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2812 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2813 } |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2814 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2815 if (*p++ != 't') |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2816 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2817 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2818 *slen += (p - (tp + *slen)); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2819 } |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2820 #endif // FEAT_MOUSE_PTERM |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2821 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2822 // Interpret the mouse code |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2823 current_button = (mouse_code & MOUSE_CLICK_MASK); |
21114
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2824 if (is_release) |
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2825 current_button |= MOUSE_RELEASE; |
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2826 |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2827 if (current_button == MOUSE_RELEASE |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2828 #ifdef FEAT_MOUSE_XTERM |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2829 && wheel_code == 0 |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2830 #endif |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2831 ) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2832 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2833 /* |
21271
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2834 * If we get a mouse drag or release event when there is no mouse |
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2835 * button held down (held_button == MOUSE_RELEASE), produce a K_IGNORE |
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2836 * below. |
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2837 * (can happen when you hold down two buttons and then let them go, or |
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2838 * click in the menu bar, but not on a menu, and drag into the text). |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2839 */ |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2840 if ((mouse_code & MOUSE_DRAG) == MOUSE_DRAG) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2841 is_drag = TRUE; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2842 current_button = held_button; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2843 } |
29591
eb07470d0395
patch 9.0.0136: after CTRL-Left-mouse click a mouse scroll also has CTRL
Bram Moolenaar <Bram@vim.org>
parents:
29451
diff
changeset
|
2844 else |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2845 { |
29591
eb07470d0395
patch 9.0.0136: after CTRL-Left-mouse click a mouse scroll also has CTRL
Bram Moolenaar <Bram@vim.org>
parents:
29451
diff
changeset
|
2846 if (wheel_code == 0) |
eb07470d0395
patch 9.0.0136: after CTRL-Left-mouse click a mouse scroll also has CTRL
Bram Moolenaar <Bram@vim.org>
parents:
29451
diff
changeset
|
2847 { |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2848 #ifdef CHECK_DOUBLE_CLICK |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2849 # ifdef FEAT_MOUSE_GPM |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2850 /* |
21271
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2851 * Only for Unix, when GUI not active, we handle multi-clicks here, but |
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2852 * not for GPM mouse events. |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2853 */ |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2854 # ifdef FEAT_GUI |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2855 if (key_name[0] != KS_GPM_MOUSE && !gui.in_use) |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2856 # else |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2857 if (key_name[0] != KS_GPM_MOUSE) |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2858 # endif |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2859 # else |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2860 # ifdef FEAT_GUI |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2861 if (!gui.in_use) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2862 # endif |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2863 # endif |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2864 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2865 /* |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2866 * Compute the time elapsed since the previous mouse click. |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2867 */ |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2868 gettimeofday(&mouse_time, NULL); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2869 if (orig_mouse_time.tv_sec == 0) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2870 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2871 /* |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2872 * Avoid computing the difference between mouse_time |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2873 * and orig_mouse_time for the first click, as the |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2874 * difference would be huge and would cause |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2875 * multiplication overflow. |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2876 */ |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2877 timediff = p_mouset; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2878 } |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2879 else |
18691
fb07fe556e67
patch 8.1.2337: double-click time sometimes miscomputed
Bram Moolenaar <Bram@vim.org>
parents:
18658
diff
changeset
|
2880 timediff = time_diff_ms(&orig_mouse_time, &mouse_time); |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2881 orig_mouse_time = mouse_time; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2882 if (mouse_code == orig_mouse_code |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2883 && timediff < p_mouset |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2884 && orig_num_clicks != 4 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2885 && orig_mouse_col == mouse_col |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2886 && orig_mouse_row == mouse_row |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2887 && (is_mouse_topline(curwin) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2888 // Double click in tab pages line also works |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2889 // when window contents changes. |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2890 || (mouse_row == 0 && firstwin->w_winrow > 0)) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2891 ) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2892 ++orig_num_clicks; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2893 else |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2894 orig_num_clicks = 1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2895 orig_mouse_col = mouse_col; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2896 orig_mouse_row = mouse_row; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2897 set_mouse_topline(curwin); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2898 } |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2899 # if defined(FEAT_GUI) || defined(FEAT_MOUSE_GPM) |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2900 else |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2901 orig_num_clicks = NUM_MOUSE_CLICKS(mouse_code); |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2902 # endif |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2903 #else |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2904 orig_num_clicks = NUM_MOUSE_CLICKS(mouse_code); |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2905 #endif |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2906 is_click = TRUE; |
29591
eb07470d0395
patch 9.0.0136: after CTRL-Left-mouse click a mouse scroll also has CTRL
Bram Moolenaar <Bram@vim.org>
parents:
29451
diff
changeset
|
2907 } |
eb07470d0395
patch 9.0.0136: after CTRL-Left-mouse click a mouse scroll also has CTRL
Bram Moolenaar <Bram@vim.org>
parents:
29451
diff
changeset
|
2908 orig_mouse_code = mouse_code; |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2909 } |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2910 if (!is_drag) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2911 held_button = mouse_code & MOUSE_CLICK_MASK; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2912 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2913 /* |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2914 * Translate the actual mouse event into a pseudo mouse event. |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2915 * First work out what modifiers are to be used. |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2916 */ |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2917 if (orig_mouse_code & MOUSE_SHIFT) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2918 *modifiers |= MOD_MASK_SHIFT; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2919 if (orig_mouse_code & MOUSE_CTRL) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2920 *modifiers |= MOD_MASK_CTRL; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2921 if (orig_mouse_code & MOUSE_ALT) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2922 *modifiers |= MOD_MASK_ALT; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2923 if (orig_num_clicks == 2) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2924 *modifiers |= MOD_MASK_2CLICK; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2925 else if (orig_num_clicks == 3) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2926 *modifiers |= MOD_MASK_3CLICK; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2927 else if (orig_num_clicks == 4) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2928 *modifiers |= MOD_MASK_4CLICK; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2929 |
21271
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2930 // Work out our pseudo mouse event. Note that MOUSE_RELEASE gets added, |
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2931 // then it's not mouse up/down. |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2932 key_name[0] = KS_EXTRA; |
21114
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2933 if (wheel_code != 0 && (!is_release || release_is_ambiguous)) |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2934 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2935 if (wheel_code & MOUSE_CTRL) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2936 *modifiers |= MOD_MASK_CTRL; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2937 if (wheel_code & MOUSE_ALT) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2938 *modifiers |= MOD_MASK_ALT; |
21114
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2939 |
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2940 if (wheel_code & 1 && wheel_code & 2) |
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2941 key_name[1] = (int)KE_MOUSELEFT; |
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2942 else if (wheel_code & 2) |
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2943 key_name[1] = (int)KE_MOUSERIGHT; |
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2944 else if (wheel_code & 1) |
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2945 key_name[1] = (int)KE_MOUSEUP; |
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2946 else |
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2947 key_name[1] = (int)KE_MOUSEDOWN; |
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2948 |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2949 held_button = MOUSE_RELEASE; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2950 } |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2951 else |
21271
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2952 key_name[1] = get_pseudo_mouse_code(current_button, is_click, is_drag); |
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2953 |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2954 |
21271
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2955 // Make sure the mouse position is valid. Some terminals may return weird |
51ff7e5abdda
patch 8.2.1186: with SGR mouse codes balloon doesn't show up after click
Bram Moolenaar <Bram@vim.org>
parents:
21114
diff
changeset
|
2956 // values. |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2957 if (mouse_col >= Columns) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2958 mouse_col = Columns - 1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2959 if (mouse_row >= Rows) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2960 mouse_row = Rows - 1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2961 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2962 return 0; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2963 } |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2964 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2965 // Functions also used for popup windows. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2966 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2967 /* |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2968 * Compute the buffer line position from the screen position "rowp" / "colp" in |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2969 * window "win". |
21339
608f674c6035
patch 8.2.1220: memory access error when dragging a popup window
Bram Moolenaar <Bram@vim.org>
parents:
21271
diff
changeset
|
2970 * "plines_cache" can be NULL (no cache) or an array with "Rows" entries that |
608f674c6035
patch 8.2.1220: memory access error when dragging a popup window
Bram Moolenaar <Bram@vim.org>
parents:
21271
diff
changeset
|
2971 * caches the plines_win() result from a previous call. Entry is zero if not |
608f674c6035
patch 8.2.1220: memory access error when dragging a popup window
Bram Moolenaar <Bram@vim.org>
parents:
21271
diff
changeset
|
2972 * computed yet. There must be no text or setting changes since the entry is |
608f674c6035
patch 8.2.1220: memory access error when dragging a popup window
Bram Moolenaar <Bram@vim.org>
parents:
21271
diff
changeset
|
2973 * put in the cache. |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2974 * Returns TRUE if the position is below the last line. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2975 */ |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2976 int |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2977 mouse_comp_pos( |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2978 win_T *win, |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2979 int *rowp, |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2980 int *colp, |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2981 linenr_T *lnump, |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2982 int *plines_cache) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2983 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2984 int col = *colp; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2985 int row = *rowp; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2986 linenr_T lnum; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2987 int retval = FALSE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2988 int off; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2989 int count; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2990 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2991 #ifdef FEAT_RIGHTLEFT |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2992 if (win->w_p_rl) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2993 col = win->w_width - 1 - col; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2994 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2995 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2996 lnum = win->w_topline; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2997 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2998 while (row > 0) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2999 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3000 int cache_idx = lnum - win->w_topline; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3001 |
21339
608f674c6035
patch 8.2.1220: memory access error when dragging a popup window
Bram Moolenaar <Bram@vim.org>
parents:
21271
diff
changeset
|
3002 // Only "Rows" lines are cached, with folding we'll run out of entries |
608f674c6035
patch 8.2.1220: memory access error when dragging a popup window
Bram Moolenaar <Bram@vim.org>
parents:
21271
diff
changeset
|
3003 // and use the slow way. |
608f674c6035
patch 8.2.1220: memory access error when dragging a popup window
Bram Moolenaar <Bram@vim.org>
parents:
21271
diff
changeset
|
3004 if (plines_cache != NULL && cache_idx < Rows |
608f674c6035
patch 8.2.1220: memory access error when dragging a popup window
Bram Moolenaar <Bram@vim.org>
parents:
21271
diff
changeset
|
3005 && plines_cache[cache_idx] > 0) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3006 count = plines_cache[cache_idx]; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3007 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3008 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3009 #ifdef FEAT_DIFF |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3010 // Don't include filler lines in "count" |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3011 if (win->w_p_diff |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3012 # ifdef FEAT_FOLDING |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3013 && !hasFoldingWin(win, lnum, NULL, NULL, TRUE, NULL) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3014 # endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3015 ) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3016 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3017 if (lnum == win->w_topline) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3018 row -= win->w_topfill; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3019 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3020 row -= diff_check_fill(win, lnum); |
31154
7e48ddb8b079
patch 9.0.0911: with 'smoothscroll' set mouse click position may be wrong
Bram Moolenaar <Bram@vim.org>
parents:
31144
diff
changeset
|
3021 count = plines_win_nofill(win, lnum, FALSE); |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3022 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3023 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3024 #endif |
31154
7e48ddb8b079
patch 9.0.0911: with 'smoothscroll' set mouse click position may be wrong
Bram Moolenaar <Bram@vim.org>
parents:
31144
diff
changeset
|
3025 count = plines_win(win, lnum, FALSE); |
21339
608f674c6035
patch 8.2.1220: memory access error when dragging a popup window
Bram Moolenaar <Bram@vim.org>
parents:
21271
diff
changeset
|
3026 if (plines_cache != NULL && cache_idx < Rows) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3027 plines_cache[cache_idx] = count; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3028 } |
31154
7e48ddb8b079
patch 9.0.0911: with 'smoothscroll' set mouse click position may be wrong
Bram Moolenaar <Bram@vim.org>
parents:
31144
diff
changeset
|
3029 |
7e48ddb8b079
patch 9.0.0911: with 'smoothscroll' set mouse click position may be wrong
Bram Moolenaar <Bram@vim.org>
parents:
31144
diff
changeset
|
3030 if (win->w_skipcol > 0 && lnum == win->w_topline) |
7e48ddb8b079
patch 9.0.0911: with 'smoothscroll' set mouse click position may be wrong
Bram Moolenaar <Bram@vim.org>
parents:
31144
diff
changeset
|
3031 { |
7e48ddb8b079
patch 9.0.0911: with 'smoothscroll' set mouse click position may be wrong
Bram Moolenaar <Bram@vim.org>
parents:
31144
diff
changeset
|
3032 // Adjust for 'smoothscroll' clipping the top screen lines. |
7e48ddb8b079
patch 9.0.0911: with 'smoothscroll' set mouse click position may be wrong
Bram Moolenaar <Bram@vim.org>
parents:
31144
diff
changeset
|
3033 // A similar formula is used in curs_columns(). |
7e48ddb8b079
patch 9.0.0911: with 'smoothscroll' set mouse click position may be wrong
Bram Moolenaar <Bram@vim.org>
parents:
31144
diff
changeset
|
3034 int width1 = win->w_width - win_col_off(win); |
7e48ddb8b079
patch 9.0.0911: with 'smoothscroll' set mouse click position may be wrong
Bram Moolenaar <Bram@vim.org>
parents:
31144
diff
changeset
|
3035 int skip_lines = 0; |
7e48ddb8b079
patch 9.0.0911: with 'smoothscroll' set mouse click position may be wrong
Bram Moolenaar <Bram@vim.org>
parents:
31144
diff
changeset
|
3036 if (win->w_skipcol > width1) |
7e48ddb8b079
patch 9.0.0911: with 'smoothscroll' set mouse click position may be wrong
Bram Moolenaar <Bram@vim.org>
parents:
31144
diff
changeset
|
3037 skip_lines = (win->w_skipcol - width1) |
7e48ddb8b079
patch 9.0.0911: with 'smoothscroll' set mouse click position may be wrong
Bram Moolenaar <Bram@vim.org>
parents:
31144
diff
changeset
|
3038 / (width1 + win_col_off2(win)) + 1; |
7e48ddb8b079
patch 9.0.0911: with 'smoothscroll' set mouse click position may be wrong
Bram Moolenaar <Bram@vim.org>
parents:
31144
diff
changeset
|
3039 else if (win->w_skipcol > 0) |
7e48ddb8b079
patch 9.0.0911: with 'smoothscroll' set mouse click position may be wrong
Bram Moolenaar <Bram@vim.org>
parents:
31144
diff
changeset
|
3040 skip_lines = 1; |
7e48ddb8b079
patch 9.0.0911: with 'smoothscroll' set mouse click position may be wrong
Bram Moolenaar <Bram@vim.org>
parents:
31144
diff
changeset
|
3041 count -= skip_lines; |
7e48ddb8b079
patch 9.0.0911: with 'smoothscroll' set mouse click position may be wrong
Bram Moolenaar <Bram@vim.org>
parents:
31144
diff
changeset
|
3042 } |
7e48ddb8b079
patch 9.0.0911: with 'smoothscroll' set mouse click position may be wrong
Bram Moolenaar <Bram@vim.org>
parents:
31144
diff
changeset
|
3043 |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3044 if (count > row) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3045 break; // Position is in this buffer line. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3046 #ifdef FEAT_FOLDING |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3047 (void)hasFoldingWin(win, lnum, NULL, &lnum, TRUE, NULL); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3048 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3049 if (lnum == win->w_buffer->b_ml.ml_line_count) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3050 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3051 retval = TRUE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3052 break; // past end of file |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3053 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3054 row -= count; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3055 ++lnum; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3056 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3057 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3058 if (!retval) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3059 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3060 // Compute the column without wrapping. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3061 off = win_col_off(win) - win_col_off2(win); |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3062 if (col < off) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3063 col = off; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3064 col += row * (win->w_width - off); |
31154
7e48ddb8b079
patch 9.0.0911: with 'smoothscroll' set mouse click position may be wrong
Bram Moolenaar <Bram@vim.org>
parents:
31144
diff
changeset
|
3065 |
7e48ddb8b079
patch 9.0.0911: with 'smoothscroll' set mouse click position may be wrong
Bram Moolenaar <Bram@vim.org>
parents:
31144
diff
changeset
|
3066 // Add skip column for the topline. |
7e48ddb8b079
patch 9.0.0911: with 'smoothscroll' set mouse click position may be wrong
Bram Moolenaar <Bram@vim.org>
parents:
31144
diff
changeset
|
3067 if (lnum == win->w_topline) |
7e48ddb8b079
patch 9.0.0911: with 'smoothscroll' set mouse click position may be wrong
Bram Moolenaar <Bram@vim.org>
parents:
31144
diff
changeset
|
3068 col += win->w_skipcol; |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3069 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3070 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3071 if (!win->w_p_wrap) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3072 col += win->w_leftcol; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3073 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3074 // skip line number and fold column in front of the line |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3075 col -= win_col_off(win); |
22788
c8a4ad051d23
patch 8.2.1942: insufficient test coverage for the Netbeans interface
Bram Moolenaar <Bram@vim.org>
parents:
22176
diff
changeset
|
3076 if (col <= 0) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3077 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3078 #ifdef FEAT_NETBEANS_INTG |
22788
c8a4ad051d23
patch 8.2.1942: insufficient test coverage for the Netbeans interface
Bram Moolenaar <Bram@vim.org>
parents:
22176
diff
changeset
|
3079 // if mouse is clicked on the gutter, then inform the netbeans server |
c8a4ad051d23
patch 8.2.1942: insufficient test coverage for the Netbeans interface
Bram Moolenaar <Bram@vim.org>
parents:
22176
diff
changeset
|
3080 if (*colp < win_col_off(win)) |
c8a4ad051d23
patch 8.2.1942: insufficient test coverage for the Netbeans interface
Bram Moolenaar <Bram@vim.org>
parents:
22176
diff
changeset
|
3081 netbeans_gutter_click(lnum); |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3082 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3083 col = 0; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3084 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3085 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3086 *colp = col; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3087 *rowp = row; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3088 *lnump = lnum; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3089 return retval; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3090 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3091 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3092 /* |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3093 * Find the window at screen position "*rowp" and "*colp". The positions are |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3094 * updated to become relative to the top-left of the window. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3095 * When "popup" is FAIL_POPUP and the position is in a popup window then NULL |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3096 * is returned. When "popup" is IGNORE_POPUP then do not even check popup |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3097 * windows. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3098 * Returns NULL when something is wrong. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3099 */ |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3100 win_T * |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3101 mouse_find_win(int *rowp, int *colp, mouse_find_T popup UNUSED) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3102 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3103 frame_T *fp; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3104 win_T *wp; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3105 |
18763
49b78d6465e5
patch 8.1.2371: FEAT_TEXT_PROP is a confusing name
Bram Moolenaar <Bram@vim.org>
parents:
18691
diff
changeset
|
3106 #ifdef FEAT_PROP_POPUP |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3107 win_T *pwp = NULL; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3108 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3109 if (popup != IGNORE_POPUP) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3110 { |
18613
fa995154904e
patch 8.1.2300: redraw breaks going through list of popup windows
Bram Moolenaar <Bram@vim.org>
parents:
18508
diff
changeset
|
3111 popup_reset_handled(POPUP_HANDLED_1); |
fa995154904e
patch 8.1.2300: redraw breaks going through list of popup windows
Bram Moolenaar <Bram@vim.org>
parents:
18508
diff
changeset
|
3112 while ((wp = find_next_popup(TRUE, POPUP_HANDLED_1)) != NULL) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3113 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3114 if (*rowp >= wp->w_winrow && *rowp < wp->w_winrow + popup_height(wp) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3115 && *colp >= wp->w_wincol |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3116 && *colp < wp->w_wincol + popup_width(wp)) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3117 pwp = wp; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3118 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3119 if (pwp != NULL) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3120 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3121 if (popup == FAIL_POPUP) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3122 return NULL; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3123 *rowp -= pwp->w_winrow; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3124 *colp -= pwp->w_wincol; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3125 return pwp; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3126 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3127 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3128 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3129 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3130 fp = topframe; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3131 *rowp -= firstwin->w_winrow; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3132 for (;;) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3133 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3134 if (fp->fr_layout == FR_LEAF) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3135 break; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3136 if (fp->fr_layout == FR_ROW) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3137 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3138 for (fp = fp->fr_child; fp->fr_next != NULL; fp = fp->fr_next) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3139 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3140 if (*colp < fp->fr_width) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3141 break; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3142 *colp -= fp->fr_width; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3143 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3144 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3145 else // fr_layout == FR_COL |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3146 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3147 for (fp = fp->fr_child; fp->fr_next != NULL; fp = fp->fr_next) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3148 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3149 if (*rowp < fp->fr_height) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3150 break; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3151 *rowp -= fp->fr_height; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3152 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3153 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3154 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3155 // When using a timer that closes a window the window might not actually |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3156 // exist. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3157 FOR_ALL_WINDOWS(wp) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3158 if (wp == fp->fr_win) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3159 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3160 #ifdef FEAT_MENU |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3161 *rowp -= wp->w_winbar_height; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3162 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3163 return wp; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3164 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3165 return NULL; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3166 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3167 |
18763
49b78d6465e5
patch 8.1.2371: FEAT_TEXT_PROP is a confusing name
Bram Moolenaar <Bram@vim.org>
parents:
18691
diff
changeset
|
3168 #if defined(NEED_VCOL2COL) || defined(FEAT_BEVAL) || defined(FEAT_PROP_POPUP) \ |
28073
f4115d080c1b
patch 8.2.4561: build failure with some combination of features
Bram Moolenaar <Bram@vim.org>
parents:
28069
diff
changeset
|
3169 || defined(FEAT_EVAL) || defined(PROTO) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3170 /* |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3171 * Convert a virtual (screen) column to a character column. |
33549
bfe07ef45143
patch 9.0.2022: getmousepos() returns wrong index for TAB char
Christian Brabandt <cb@256bit.org>
parents:
33316
diff
changeset
|
3172 * The first column is zero. |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3173 */ |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3174 int |
33575
8fc442c731ca
patch 9.0.2032: cannot get mouse click pos for tab or virt text
Christian Brabandt <cb@256bit.org>
parents:
33549
diff
changeset
|
3175 vcol2col(win_T *wp, linenr_T lnum, int vcol, colnr_T *coladdp) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3176 { |
29451
057c26b5c33a
patch 9.0.0067: cannot show virtual text
Bram Moolenaar <Bram@vim.org>
parents:
29413
diff
changeset
|
3177 char_u *line; |
057c26b5c33a
patch 9.0.0067: cannot show virtual text
Bram Moolenaar <Bram@vim.org>
parents:
29413
diff
changeset
|
3178 chartabsize_T cts; |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3179 |
29451
057c26b5c33a
patch 9.0.0067: cannot show virtual text
Bram Moolenaar <Bram@vim.org>
parents:
29413
diff
changeset
|
3180 // try to advance to the specified column |
057c26b5c33a
patch 9.0.0067: cannot show virtual text
Bram Moolenaar <Bram@vim.org>
parents:
29413
diff
changeset
|
3181 line = ml_get_buf(wp->w_buffer, lnum, FALSE); |
057c26b5c33a
patch 9.0.0067: cannot show virtual text
Bram Moolenaar <Bram@vim.org>
parents:
29413
diff
changeset
|
3182 init_chartabsize_arg(&cts, wp, lnum, 0, line, line); |
057c26b5c33a
patch 9.0.0067: cannot show virtual text
Bram Moolenaar <Bram@vim.org>
parents:
29413
diff
changeset
|
3183 while (cts.cts_vcol < vcol && *cts.cts_ptr != NUL) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3184 { |
33549
bfe07ef45143
patch 9.0.2022: getmousepos() returns wrong index for TAB char
Christian Brabandt <cb@256bit.org>
parents:
33316
diff
changeset
|
3185 int size = win_lbr_chartabsize(&cts, NULL); |
bfe07ef45143
patch 9.0.2022: getmousepos() returns wrong index for TAB char
Christian Brabandt <cb@256bit.org>
parents:
33316
diff
changeset
|
3186 if (cts.cts_vcol + size > vcol) |
bfe07ef45143
patch 9.0.2022: getmousepos() returns wrong index for TAB char
Christian Brabandt <cb@256bit.org>
parents:
33316
diff
changeset
|
3187 break; |
bfe07ef45143
patch 9.0.2022: getmousepos() returns wrong index for TAB char
Christian Brabandt <cb@256bit.org>
parents:
33316
diff
changeset
|
3188 cts.cts_vcol += size; |
29451
057c26b5c33a
patch 9.0.0067: cannot show virtual text
Bram Moolenaar <Bram@vim.org>
parents:
29413
diff
changeset
|
3189 MB_PTR_ADV(cts.cts_ptr); |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3190 } |
29451
057c26b5c33a
patch 9.0.0067: cannot show virtual text
Bram Moolenaar <Bram@vim.org>
parents:
29413
diff
changeset
|
3191 clear_chartabsize_arg(&cts); |
057c26b5c33a
patch 9.0.0067: cannot show virtual text
Bram Moolenaar <Bram@vim.org>
parents:
29413
diff
changeset
|
3192 |
33575
8fc442c731ca
patch 9.0.2032: cannot get mouse click pos for tab or virt text
Christian Brabandt <cb@256bit.org>
parents:
33549
diff
changeset
|
3193 if (coladdp != NULL) |
8fc442c731ca
patch 9.0.2032: cannot get mouse click pos for tab or virt text
Christian Brabandt <cb@256bit.org>
parents:
33549
diff
changeset
|
3194 *coladdp = vcol - cts.cts_vcol; |
29451
057c26b5c33a
patch 9.0.0067: cannot show virtual text
Bram Moolenaar <Bram@vim.org>
parents:
29413
diff
changeset
|
3195 return (int)(cts.cts_ptr - line); |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3196 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3197 #endif |
18623
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3198 |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3199 #if defined(FEAT_EVAL) || defined(PROTO) |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
3200 /* |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
3201 * "getmousepos()" function. |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
3202 */ |
18623
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3203 void |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3204 f_getmousepos(typval_T *argvars UNUSED, typval_T *rettv) |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3205 { |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3206 dict_T *d; |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3207 win_T *wp; |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3208 int row = mouse_row; |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3209 int col = mouse_col; |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3210 varnumber_T winid = 0; |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3211 varnumber_T winrow = 0; |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3212 varnumber_T wincol = 0; |
28069
236b80af9833
patch 8.2.4559: getmousepos() returns the screen column
Bram Moolenaar <Bram@vim.org>
parents:
28061
diff
changeset
|
3213 linenr_T lnum = 0; |
18623
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3214 varnumber_T column = 0; |
33575
8fc442c731ca
patch 9.0.2032: cannot get mouse click pos for tab or virt text
Christian Brabandt <cb@256bit.org>
parents:
33549
diff
changeset
|
3215 colnr_T coladd = 0; |
18623
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3216 |
29175
755ab148288b
patch 8.2.5107: some callers of rettv_list_alloc() check for not OK
Bram Moolenaar <Bram@vim.org>
parents:
28942
diff
changeset
|
3217 if (rettv_dict_alloc(rettv) == FAIL) |
18623
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3218 return; |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3219 d = rettv->vval.v_dict; |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3220 |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3221 dict_add_number(d, "screenrow", (varnumber_T)mouse_row + 1); |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3222 dict_add_number(d, "screencol", (varnumber_T)mouse_col + 1); |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3223 |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3224 wp = mouse_find_win(&row, &col, FIND_POPUP); |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3225 if (wp != NULL) |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3226 { |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3227 int top_off = 0; |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3228 int left_off = 0; |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3229 int height = wp->w_height + wp->w_status_height; |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3230 |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
3231 # ifdef FEAT_PROP_POPUP |
18623
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3232 if (WIN_IS_POPUP(wp)) |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3233 { |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3234 top_off = popup_top_extra(wp); |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3235 left_off = popup_left_extra(wp); |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3236 height = popup_height(wp); |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3237 } |
31135
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
3238 # endif |
18623
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3239 if (row < height) |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3240 { |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3241 winid = wp->w_id; |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3242 winrow = row + 1; |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3243 wincol = col + 1; |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3244 row -= top_off; |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3245 col -= left_off; |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3246 if (row >= 0 && row < wp->w_height && col >= 0 && col < wp->w_width) |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3247 { |
28087
4c60e656e054
patch 8.2.4568: getmousepos() does not compute the column below the last line
Bram Moolenaar <Bram@vim.org>
parents:
28073
diff
changeset
|
3248 (void)mouse_comp_pos(wp, &row, &col, &lnum, NULL); |
33575
8fc442c731ca
patch 9.0.2032: cannot get mouse click pos for tab or virt text
Christian Brabandt <cb@256bit.org>
parents:
33549
diff
changeset
|
3249 col = vcol2col(wp, lnum, col, &coladd); |
18623
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3250 column = col + 1; |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3251 } |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3252 } |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3253 } |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3254 dict_add_number(d, "winid", winid); |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3255 dict_add_number(d, "winrow", winrow); |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3256 dict_add_number(d, "wincol", wincol); |
28069
236b80af9833
patch 8.2.4559: getmousepos() returns the screen column
Bram Moolenaar <Bram@vim.org>
parents:
28061
diff
changeset
|
3257 dict_add_number(d, "line", (varnumber_T)lnum); |
18623
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3258 dict_add_number(d, "column", column); |
33575
8fc442c731ca
patch 9.0.2032: cannot get mouse click pos for tab or virt text
Christian Brabandt <cb@256bit.org>
parents:
33549
diff
changeset
|
3259 dict_add_number(d, "coladd", coladd); |
18623
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3260 } |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3261 #endif |