Mercurial > vim
annotate src/mouse.c @ 34001:1489ba07ecb4 v9.0.2183
patch 9.0.2183: Maximum callback depth is not configurable
Commit: https://github.com/vim/vim/commit/fe583b1e5987fbfdb5f2141c133dbff9665ed301
Author: zeertzjq <zeertzjq@outlook.com>
Date: Thu Dec 21 16:59:26 2023 +0100
patch 9.0.2183: Maximum callback depth is not configurable
Problem: Maximum callback depth is not configurable.
Solution: Revert patch 9.0.2103. Set 'maxfuncdepth' in test.
(zeertzjq)
fixes: #13732
closes: #13736
Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Thu, 21 Dec 2023 17:15:06 +0100 |
parents | 63341afcd329 |
children | a522c6c0127b |
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. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1699 if (cmdwin_type != 0 && row < curwin->w_winrow) |
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 |
30645
101f08b49ed3
patch 9.0.0657: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents:
29841
diff
changeset
|
1827 col >= wp->w_p_fdc + (cmdwin_type == 0 && wp == curwin ? 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 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1835 if (cmdwin_type != 0 && wp != curwin) |
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; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1847 wp = 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
|
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. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1940 if (cmdwin_type != 0 && row < curwin->w_winrow) |
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 |
30645
101f08b49ed3
patch 9.0.0657: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents:
29841
diff
changeset
|
2078 col >= curwin->w_p_fdc + (cmdwin_type == 0 ? 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 |
32824
22a08166a876
patch 9.0.1725: cursor pos wrong after concealed text with 'virtualedit'
Christian Brabandt <cb@256bit.org>
parents:
32009
diff
changeset
|
2101 if (col_from_screen == MAXCOL) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
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 // When clicking after end of line, still need to set correct curswant |
33307
cb447202030d
patch 9.0.1919: Wrong curswant when clicking on empty line or with vsplits
Christian Brabandt <cb@256bit.org>
parents:
33223
diff
changeset
|
2104 int off_l = LineOffset[prev_row] + curwin->w_wincol; |
32824
22a08166a876
patch 9.0.1725: cursor pos wrong after concealed text with 'virtualedit'
Christian Brabandt <cb@256bit.org>
parents:
32009
diff
changeset
|
2105 if (ScreenCols[off_l] < MAXCOL) |
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 { |
32824
22a08166a876
patch 9.0.1725: cursor pos wrong after concealed text with 'virtualedit'
Christian Brabandt <cb@256bit.org>
parents:
32009
diff
changeset
|
2107 // Binary search to find last char in line |
33307
cb447202030d
patch 9.0.1919: Wrong curswant when clicking on empty line or with vsplits
Christian Brabandt <cb@256bit.org>
parents:
33223
diff
changeset
|
2108 int off_r = LineOffset[prev_row] + prev_col; |
32824
22a08166a876
patch 9.0.1725: cursor pos wrong after concealed text with 'virtualedit'
Christian Brabandt <cb@256bit.org>
parents:
32009
diff
changeset
|
2109 int off_click = off_r; |
22a08166a876
patch 9.0.1725: cursor pos wrong after concealed text with 'virtualedit'
Christian Brabandt <cb@256bit.org>
parents:
32009
diff
changeset
|
2110 while (off_l < off_r) |
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 int off_m = (off_l + off_r + 1) / 2; |
22a08166a876
patch 9.0.1725: cursor pos wrong after concealed text with 'virtualedit'
Christian Brabandt <cb@256bit.org>
parents:
32009
diff
changeset
|
2113 if (ScreenCols[off_m] < MAXCOL) |
22a08166a876
patch 9.0.1725: cursor pos wrong after concealed text with 'virtualedit'
Christian Brabandt <cb@256bit.org>
parents:
32009
diff
changeset
|
2114 off_l = off_m; |
22a08166a876
patch 9.0.1725: cursor pos wrong after concealed text with 'virtualedit'
Christian Brabandt <cb@256bit.org>
parents:
32009
diff
changeset
|
2115 else |
22a08166a876
patch 9.0.1725: cursor pos wrong after concealed text with 'virtualedit'
Christian Brabandt <cb@256bit.org>
parents:
32009
diff
changeset
|
2116 off_r = off_m - 1; |
22a08166a876
patch 9.0.1725: cursor pos wrong after concealed text with 'virtualedit'
Christian Brabandt <cb@256bit.org>
parents:
32009
diff
changeset
|
2117 } |
33316
a2dfcbbfc301
patch 9.0.1923: curswant wrong on click with 've' and 'wrap' set
Christian Brabandt <cb@256bit.org>
parents:
33307
diff
changeset
|
2118 colnr_T eol_vcol = ScreenCols[off_r]; |
a2dfcbbfc301
patch 9.0.1923: curswant wrong on click with 've' and 'wrap' set
Christian Brabandt <cb@256bit.org>
parents:
33307
diff
changeset
|
2119 if (eol_vcol < 0) |
a2dfcbbfc301
patch 9.0.1923: curswant wrong on click with 've' and 'wrap' set
Christian Brabandt <cb@256bit.org>
parents:
33307
diff
changeset
|
2120 // Empty line or whole line before w_leftcol, |
a2dfcbbfc301
patch 9.0.1923: curswant wrong on click with 've' and 'wrap' set
Christian Brabandt <cb@256bit.org>
parents:
33307
diff
changeset
|
2121 // with columns before buffer text |
a2dfcbbfc301
patch 9.0.1923: curswant wrong on click with 've' and 'wrap' set
Christian Brabandt <cb@256bit.org>
parents:
33307
diff
changeset
|
2122 eol_vcol = curwin->w_leftcol - 1; |
a2dfcbbfc301
patch 9.0.1923: curswant wrong on click with 've' and 'wrap' set
Christian Brabandt <cb@256bit.org>
parents:
33307
diff
changeset
|
2123 col = eol_vcol + (off_click - off_r); |
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
|
2124 } |
34e93e046526
patch 9.0.0048: cursor in wrong column with mouse click after concealed text
Bram Moolenaar <Bram@vim.org>
parents:
29387
diff
changeset
|
2125 else |
33316
a2dfcbbfc301
patch 9.0.1923: curswant wrong on click with 've' and 'wrap' set
Christian Brabandt <cb@256bit.org>
parents:
33307
diff
changeset
|
2126 // Empty line or whole line before w_leftcol |
a2dfcbbfc301
patch 9.0.1923: curswant wrong on click with 've' and 'wrap' set
Christian Brabandt <cb@256bit.org>
parents:
33307
diff
changeset
|
2127 col = prev_col - curwin->w_wincol + curwin->w_leftcol; |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2128 } |
32824
22a08166a876
patch 9.0.1725: cursor pos wrong after concealed text with 'virtualedit'
Christian Brabandt <cb@256bit.org>
parents:
32009
diff
changeset
|
2129 else 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
|
2130 { |
32824
22a08166a876
patch 9.0.1725: cursor pos wrong after concealed text with 'virtualedit'
Christian Brabandt <cb@256bit.org>
parents:
32009
diff
changeset
|
2131 // 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
|
2132 // concealed characters. |
22a08166a876
patch 9.0.1725: cursor pos wrong after concealed text with 'virtualedit'
Christian Brabandt <cb@256bit.org>
parents:
32009
diff
changeset
|
2133 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
|
2134 } |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2135 |
32824
22a08166a876
patch 9.0.1725: cursor pos wrong after concealed text with 'virtualedit'
Christian Brabandt <cb@256bit.org>
parents:
32009
diff
changeset
|
2136 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
|
2137 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
|
2138 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
|
2139 { |
22a08166a876
patch 9.0.1725: cursor pos wrong after concealed text with 'virtualedit'
Christian Brabandt <cb@256bit.org>
parents:
32009
diff
changeset
|
2140 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
|
2141 *inclusive = TRUE; |
22a08166a876
patch 9.0.1725: cursor pos wrong after concealed text with 'virtualedit'
Christian Brabandt <cb@256bit.org>
parents:
32009
diff
changeset
|
2142 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
|
2143 } |
22a08166a876
patch 9.0.1725: cursor pos wrong after concealed text with 'virtualedit'
Christian Brabandt <cb@256bit.org>
parents:
32009
diff
changeset
|
2144 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
|
2145 *inclusive = FALSE; |
22a08166a876
patch 9.0.1725: cursor pos wrong after concealed text with 'virtualedit'
Christian Brabandt <cb@256bit.org>
parents:
32009
diff
changeset
|
2146 |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2147 count = IN_BUFFER; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2148 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
|
2149 || 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
|
2150 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
|
2151 |
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
|
2152 #ifdef FEAT_FOLDING |
29387
9dce192d1ac2
patch 9.0.0036: 'fillchars' cannot have window-local values
Bram Moolenaar <Bram@vim.org>
parents:
29175
diff
changeset
|
2153 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
|
2154 count |= MOUSE_FOLD_OPEN; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2155 else if (mouse_char != ' ') |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2156 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
|
2157 #endif |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2158 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2159 return count; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2160 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2161 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2162 /* |
31103
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2163 * 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
|
2164 * 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
|
2165 */ |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2166 int |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2167 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
|
2168 { |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2169 if (curwin->w_p_wrap) |
33223
def9fc5c92d1
patch 9.0.1886: Various Typos
Christian Brabandt <cb@256bit.org>
parents:
32824
diff
changeset
|
2170 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
|
2171 |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2172 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
|
2173 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
|
2174 |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2175 // 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
|
2176 // 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
|
2177 if ( |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2178 #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
|
2179 (!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
|
2180 #endif |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2181 !virtual_active() |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2182 && (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
|
2183 { |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2184 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
|
2185 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
|
2186 } |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2187 |
31133
cc0c4141fb73
patch 9.0.0901: setting w_leftcol and handling side effects is confusing
Bram Moolenaar <Bram@vim.org>
parents:
31103
diff
changeset
|
2188 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
|
2189 } |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2190 |
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2191 /* |
31144
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
2192 * 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
|
2193 * "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
|
2194 */ |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2195 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
|
2196 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
|
2197 { |
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
|
2198 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
|
2199 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2200 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
|
2201 { |
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
|
2202 // 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
|
2203 // 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
|
2204 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
|
2205 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
|
2206 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
|
2207 if (curwin == NULL) |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
2208 { |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
2209 curwin = old_curwin; |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2210 return; |
31144
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
2211 } |
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
2212 |
18763
49b78d6465e5
patch 8.1.2371: FEAT_TEXT_PROP is a confusing name
Bram Moolenaar <Bram@vim.org>
parents:
18691
diff
changeset
|
2213 #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
|
2214 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
|
2215 { |
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
|
2216 // 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
|
2217 curwin = old_curwin; |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2218 return; |
31144
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
2219 } |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2220 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2221 curbuf = curwin->w_buffer; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2222 } |
31103
33ca088dbd3e
patch 9.0.0886: horizontal mouse scroll only works in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
30980
diff
changeset
|
2223 |
31144
388ef91ae4f5
patch 9.0.0906: mouse scroll code is not optimal
Bram Moolenaar <Bram@vim.org>
parents:
31135
diff
changeset
|
2224 // 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
|
2225 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
|
2226 |
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
|
2227 #ifdef FEAT_SYN_HL |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
2228 if (curwin != old_curwin && curwin->w_p_cul) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2229 redraw_for_cursorline(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
|
2230 #endif |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2231 curwin->w_redr_status = TRUE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2232 curwin = old_curwin; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2233 curbuf = curwin->w_buffer; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2234 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2235 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2236 /* |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2237 * Mouse clicks and drags. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2238 */ |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2239 void |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2240 nv_mouse(cmdarg_T *cap) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2241 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2242 (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
|
2243 } |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2244 |
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
|
2245 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
|
2246 |
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
|
2247 void |
32009
4545f58c8490
patch 9.0.1336: functions without arguments are not always declared properly
Bram Moolenaar <Bram@vim.org>
parents:
31194
diff
changeset
|
2248 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
|
2249 { |
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
|
2250 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
|
2251 } |
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
|
2252 |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2253 /* |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2254 * 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
|
2255 * 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
|
2256 */ |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2257 int |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2258 check_termcode_mouse( |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2259 char_u *tp, |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2260 int *slen, |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2261 char_u *key_name, |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2262 char_u *modifiers_start, |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2263 int idx, |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2264 int *modifiers) |
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 int j; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2267 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
|
2268 #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
|
2269 || 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
|
2270 char_u bytes[6]; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2271 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
|
2272 #endif |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2273 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
|
2274 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
|
2275 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
|
2276 int wheel_code = 0; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2277 int current_button; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2278 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
|
2279 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
|
2280 #ifdef CHECK_DOUBLE_CLICK |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2281 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
|
2282 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
|
2283 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
|
2284 // time of previous mouse click |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2285 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
|
2286 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
|
2287 #endif |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2288 |
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
|
2289 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
|
2290 |
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
|
2291 #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
|
2292 || 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
|
2293 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
|
2294 # ifdef FEAT_MOUSE_GPM |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2295 || 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
|
2296 # endif |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2297 ) |
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 /* |
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
|
2300 * 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
|
2301 * 0x20 = left button down |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2302 * 0x21 = middle button down |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2303 * 0x22 = right button down |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2304 * 0x23 = any button release |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2305 * 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
|
2306 * 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
|
2307 * add 0x04 for SHIFT |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2308 * add 0x08 for ALT |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2309 * add 0x10 for CTRL |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2310 * 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
|
2311 * 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
|
2312 * 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
|
2313 * c == column + ' ' + 1 == column + 33 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2314 * r == row + ' ' + 1 == row + 33 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2315 * |
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
|
2316 * 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
|
2317 * 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
|
2318 * allows for mapping them. |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2319 */ |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2320 for (;;) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2321 { |
31194
fa26d002eb2a
patch 9.0.0931: MS-Windows: mouse column limited to 223
Bram Moolenaar <Bram@vim.org>
parents:
31166
diff
changeset
|
2322 // 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
|
2323 // 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
|
2324 # 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
|
2325 if (TRUE |
fa26d002eb2a
patch 9.0.0931: MS-Windows: mouse column limited to 223
Bram Moolenaar <Bram@vim.org>
parents:
31166
diff
changeset
|
2326 # 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
|
2327 && gui.in_use |
fa26d002eb2a
patch 9.0.0931: MS-Windows: mouse column limited to 223
Bram Moolenaar <Bram@vim.org>
parents:
31166
diff
changeset
|
2328 # endif |
fa26d002eb2a
patch 9.0.0931: MS-Windows: mouse column limited to 223
Bram Moolenaar <Bram@vim.org>
parents:
31166
diff
changeset
|
2329 ) |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2330 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2331 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
|
2332 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
|
2333 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2334 mouse_code = bytes[0]; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2335 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
|
2336 + bytes[2] - ' ' - 1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2337 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
|
2338 + bytes[4] - ' ' - 1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2339 } |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2340 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
|
2341 # endif |
18150
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 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
|
2344 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
|
2345 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2346 mouse_code = bytes[0]; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2347 mouse_col = bytes[1] - ' ' - 1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2348 mouse_row = bytes[2] - ' ' - 1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2349 } |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2350 *slen += num_bytes; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2351 |
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
|
2352 // 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
|
2353 // 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
|
2354 // 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
|
2355 # ifdef FEAT_GUI |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2356 if (gui.in_use) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2357 j = 3; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2358 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
|
2359 # endif |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2360 j = get_termcode_len(idx); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2361 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
|
2362 && tp[*slen + j] == mouse_code |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2363 && tp[*slen + j + 1] != NUL |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2364 && 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
|
2365 # ifdef FEAT_GUI |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2366 && (!gui.in_use |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2367 || (tp[*slen + j + 3] != NUL |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2368 && 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
|
2369 # endif |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2370 ) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2371 *slen += j; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2372 else |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2373 break; |
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 } |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2376 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2377 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
|
2378 || 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
|
2379 || 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
|
2380 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2381 // 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
|
2382 // 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
|
2383 // instead of bytes. |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2384 // |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2385 // \033[%d;%d;%dM |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2386 // ^-- row |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2387 // ^----- column |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2388 // ^-------- code |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2389 // |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2390 // 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
|
2391 // 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
|
2392 // instead of bytes. |
18150
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 // \033[<%d;%d;%dM |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2395 // ^-- row |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2396 // ^----- column |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2397 // ^-------- code |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2398 // |
28809
d0241e74bfdb
patch 8.2.4928: various white space and cosmetic mistakes
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2399 // \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
|
2400 // ^-- row |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2401 // ^----- column |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2402 // ^-------- code |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2403 p = modifiers_start; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2404 if (p == NULL) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2405 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2406 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2407 mouse_code = getdigits(&p); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2408 if (*p++ != ';') |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2409 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2410 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2411 // 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
|
2412 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
|
2413 || 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
|
2414 mouse_code += 32; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2415 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2416 mouse_col = getdigits(&p) - 1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2417 if (*p++ != ';') |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2418 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2419 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2420 mouse_row = getdigits(&p) - 1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2421 |
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
|
2422 // 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
|
2423 // (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
|
2424 *modifiers = 0; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2425 } |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2426 |
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
|
2427 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
|
2428 || 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
|
2429 { |
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2430 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
|
2431 { |
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
|
2432 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
|
2433 // 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
|
2434 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
|
2435 } |
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
|
2436 } |
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2437 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
|
2438 { |
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2439 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
|
2440 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
|
2441 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
|
2442 } |
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2443 |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2444 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
|
2445 # ifdef FEAT_MOUSE_GPM |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2446 || 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
|
2447 # 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
|
2448 # ifdef FEAT_MOUSE_URXVT |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2449 || 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
|
2450 # endif |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2451 || 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
|
2452 || 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
|
2453 { |
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
|
2454 # if !defined(MSWIN) |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2455 /* |
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
|
2456 * 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
|
2457 * 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
|
2458 * 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
|
2459 * (multi-clicks use >= 0x60). |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2460 */ |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2461 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
|
2462 # ifdef FEAT_GUI |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2463 && !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
|
2464 # 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
|
2465 # ifdef FEAT_MOUSE_GPM |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2466 && 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
|
2467 # endif |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2468 ) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2469 { |
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
|
2470 # if defined(UNIX) |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2471 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
|
2472 // 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
|
2473 mouse_code = MOUSE_DRAG; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2474 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
|
2475 # endif |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2476 // 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
|
2477 // 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
|
2478 wheel_code = mouse_code; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2479 } |
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
|
2480 # ifdef FEAT_MOUSE_XTERM |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2481 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
|
2482 # ifdef FEAT_GUI |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2483 && !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
|
2484 # endif |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2485 && (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
|
2486 || 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
|
2487 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2488 // 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
|
2489 // 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
|
2490 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
|
2491 + MOUSEWHEEL_LOW; |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2492 } |
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
|
2493 # endif |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2494 |
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
|
2495 # if defined(UNIX) |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2496 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
|
2497 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2498 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
|
2499 mouse_code |= MOUSE_DRAG; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2500 } |
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
|
2501 # 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
|
2502 # ifdef FEAT_XCLIPBOARD |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2503 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
|
2504 { |
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
|
2505 if (is_release) |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2506 stop_xterm_trace(); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2507 else |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2508 start_xterm_trace(mouse_code); |
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 # 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
|
2511 # endif |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2512 } |
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
|
2513 #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
|
2514 #ifdef FEAT_MOUSE_NET |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2515 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
|
2516 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2517 int mc, mr; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2518 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2519 // 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
|
2520 // \033}6,45\r |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2521 // '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
|
2522 p = tp + *slen; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2523 mr = getdigits(&p); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2524 if (*p++ != ',') |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2525 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2526 mc = getdigits(&p); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2527 if (*p++ != '\r') |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2528 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2529 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2530 mouse_col = mc - 1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2531 mouse_row = mr - 1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2532 mouse_code = MOUSE_LEFT; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2533 *slen += (int)(p - (tp + *slen)); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2534 } |
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
|
2535 #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
|
2536 #ifdef FEAT_MOUSE_JSB |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2537 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
|
2538 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2539 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
|
2540 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2541 /* |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2542 * JSBTERM Input Model |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2543 * \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
|
2544 * (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
|
2545 * (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
|
2546 * (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
|
2547 * (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
|
2548 * u: button up |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2549 * ### 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
|
2550 * ### 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
|
2551 * (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
|
2552 * (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
|
2553 * \033\\ terminating sequence |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2554 */ |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2555 p = tp + *slen; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2556 button = mouse_code = 0; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2557 switch (*p++) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2558 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2559 case 'L': button = 1; break; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2560 case '-': break; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2561 case 'x': break; // ignore sequence |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2562 default: return -1; // Unknown Result |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2563 } |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2564 switch (*p++) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2565 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2566 case 'M': button |= 2; break; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2567 case '-': break; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2568 case 'x': break; // ignore sequence |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2569 default: return -1; // Unknown Result |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2570 } |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2571 switch (*p++) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2572 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2573 case 'R': button |= 4; break; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2574 case '-': break; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2575 case 'x': break; // ignore sequence |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2576 default: return -1; // Unknown Result |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2577 } |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2578 status = *p++; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2579 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
|
2580 mult /= 10, p++) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2581 if (*p >= '0' && *p <= '9') |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2582 val += (*p - '0') * mult; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2583 else |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2584 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2585 mouse_col = val; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2586 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
|
2587 mult /= 10, p++) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2588 if (*p >= '0' && *p <= '9') |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2589 val += (*p - '0') * mult; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2590 else |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2591 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2592 mouse_row = val; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2593 switch (*p++) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2594 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2595 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
|
2596 case '-': break; // Not Pressed |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2597 case 'x': break; // Not Reporting |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2598 default: return -1; // Unknown Result |
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 switch (*p++) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2601 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2602 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
|
2603 case '-': break; // Not Pressed |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2604 case 'x': break; // Not Reporting |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2605 default: return -1; // Unknown Result |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2606 } |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2607 if (*p++ != '\033') |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2608 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2609 if (*p++ != '\\') |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2610 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2611 switch (status) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2612 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2613 case 'D': // Double Click |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2614 case 'S': // Single Click |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2615 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
|
2616 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
|
2617 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
|
2618 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
|
2619 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
|
2620 break; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2621 case 'm': // Mouse move |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2622 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
|
2623 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
|
2624 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
|
2625 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
|
2626 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
|
2627 if ((button & 7) != 0) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2628 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2629 held_button = mouse_code; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2630 mouse_code |= MOUSE_DRAG; |
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 is_drag = TRUE; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2633 showmode(); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2634 break; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2635 case 'd': // Button Down |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2636 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
|
2637 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
|
2638 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
|
2639 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
|
2640 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
|
2641 break; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2642 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
|
2643 is_release = TRUE; |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2644 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
|
2645 mouse_code |= MOUSE_LEFT; |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2646 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
|
2647 mouse_code |= MOUSE_MIDDLE; |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2648 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
|
2649 mouse_code |= MOUSE_RIGHT; |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2650 if (button & 8) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2651 mouse_code |= MOUSE_SHIFT; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2652 if (button & 16) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2653 mouse_code |= MOUSE_CTRL; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2654 break; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2655 default: return -1; // Unknown Result |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2656 } |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2657 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2658 *slen += (p - (tp + *slen)); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2659 } |
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
|
2660 #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
|
2661 #ifdef FEAT_MOUSE_DEC |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2662 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
|
2663 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2664 /* |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2665 * The DEC Locator Input Model |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2666 * Netterm delivers the code sequence: |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2667 * \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
|
2668 * \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
|
2669 * \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
|
2670 * \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
|
2671 * 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
|
2672 * Pe is the event code |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2673 * Pb is the button code |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2674 * Pr is the row coordinate |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2675 * Pc is the column coordinate |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2676 * 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
|
2677 * 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
|
2678 * 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
|
2679 * 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
|
2680 * 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
|
2681 * 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
|
2682 * locator report |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2683 * 2 - left button down |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2684 * 3 - left button up |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2685 * 4 - middle button down |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2686 * 5 - middle button up |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2687 * 6 - right button down |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2688 * 7 - right button up |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2689 * 8 - fourth button down |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2690 * 9 - fourth button up |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2691 * 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
|
2692 * 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
|
2693 * 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
|
2694 * 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
|
2695 * button depressed |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2696 * 0 - no buttons down, |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2697 * 1 - right, |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2698 * 2 - middle, |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2699 * 4 - left, |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2700 * 8 - fourth |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2701 * 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
|
2702 * 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
|
2703 * 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
|
2704 * 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
|
2705 * 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
|
2706 * 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
|
2707 * 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
|
2708 * 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
|
2709 * 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
|
2710 */ |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2711 int Pe, Pb, Pr, Pc; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2712 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2713 p = tp + *slen; |
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 // get event status |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2716 Pe = getdigits(&p); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2717 if (*p++ != ';') |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2718 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2719 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2720 // get button status |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2721 Pb = getdigits(&p); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2722 if (*p++ != ';') |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2723 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2724 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2725 // get row status |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2726 Pr = getdigits(&p); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2727 if (*p++ != ';') |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2728 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2729 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2730 // get column status |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2731 Pc = getdigits(&p); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2732 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2733 // the page parameter is optional |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2734 if (*p == ';') |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2735 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2736 p++; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2737 (void)getdigits(&p); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2738 } |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2739 if (*p++ != '&') |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2740 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2741 if (*p++ != 'w') |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2742 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2743 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2744 mouse_code = 0; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2745 switch (Pe) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2746 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2747 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
|
2748 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
|
2749 // the status of all buttons |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2750 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
|
2751 if (Pb & 4) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2752 mouse_code = MOUSE_LEFT; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2753 if (Pb & 2) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2754 mouse_code = MOUSE_MIDDLE; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2755 if (Pb & 1) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2756 mouse_code = MOUSE_RIGHT; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2757 if (Pb) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2758 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2759 held_button = mouse_code; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2760 mouse_code |= MOUSE_DRAG; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2761 WantQueryMouse = TRUE; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2762 } |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2763 is_drag = TRUE; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2764 showmode(); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2765 break; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2766 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
|
2767 WantQueryMouse = TRUE; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2768 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
|
2769 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
|
2770 is_release = TRUE; |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2771 break; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2772 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
|
2773 WantQueryMouse = TRUE; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2774 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
|
2775 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
|
2776 is_release = TRUE; |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2777 break; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2778 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
|
2779 WantQueryMouse = TRUE; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2780 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
|
2781 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
|
2782 is_release = TRUE; |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2783 break; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2784 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
|
2785 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
|
2786 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
|
2787 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
|
2788 } |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2789 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2790 mouse_col = Pc - 1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2791 mouse_row = Pr - 1; |
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 *slen += (int)(p - (tp + *slen)); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2794 } |
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
|
2795 #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
|
2796 #ifdef FEAT_MOUSE_PTERM |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2797 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
|
2798 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2799 int button, num_clicks, action; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2800 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2801 p = tp + *slen; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2802 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2803 action = getdigits(&p); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2804 if (*p++ != ';') |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2805 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2806 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2807 mouse_row = getdigits(&p); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2808 if (*p++ != ';') |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2809 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2810 mouse_col = getdigits(&p); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2811 if (*p++ != ';') |
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 button = getdigits(&p); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2815 mouse_code = 0; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2816 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2817 switch (button) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2818 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2819 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
|
2820 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
|
2821 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
|
2822 default: return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2823 } |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2824 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2825 switch (action) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2826 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2827 case 31: // Initial press |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2828 if (*p++ != ';') |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2829 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2830 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2831 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
|
2832 break; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2833 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2834 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
|
2835 is_release = TRUE; |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2836 break; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2837 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2838 case 33: // Drag |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2839 held_button = mouse_code; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2840 mouse_code |= MOUSE_DRAG; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2841 break; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2842 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2843 default: |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2844 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2845 } |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2846 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2847 if (*p++ != 't') |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2848 return -1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2849 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2850 *slen += (p - (tp + *slen)); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2851 } |
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
|
2852 #endif // FEAT_MOUSE_PTERM |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2853 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2854 // Interpret the mouse code |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2855 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
|
2856 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
|
2857 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
|
2858 |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2859 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
|
2860 #ifdef FEAT_MOUSE_XTERM |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2861 && 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
|
2862 #endif |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2863 ) |
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 /* |
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
|
2866 * 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
|
2867 * 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
|
2868 * 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
|
2869 * (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
|
2870 * 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
|
2871 */ |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2872 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
|
2873 is_drag = TRUE; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2874 current_button = held_button; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2875 } |
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
|
2876 else |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2877 { |
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
|
2878 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
|
2879 { |
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
|
2880 #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
|
2881 # ifdef FEAT_MOUSE_GPM |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2882 /* |
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
|
2883 * 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
|
2884 * 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
|
2885 */ |
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
|
2886 # ifdef FEAT_GUI |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2887 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
|
2888 # else |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2889 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
|
2890 # 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
|
2891 # 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
|
2892 # ifdef FEAT_GUI |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2893 if (!gui.in_use) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2894 # 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
|
2895 # endif |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2896 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2897 /* |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2898 * 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
|
2899 */ |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2900 gettimeofday(&mouse_time, NULL); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2901 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
|
2902 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2903 /* |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2904 * 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
|
2905 * 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
|
2906 * 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
|
2907 * multiplication overflow. |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2908 */ |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2909 timediff = p_mouset; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2910 } |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2911 else |
18691
fb07fe556e67
patch 8.1.2337: double-click time sometimes miscomputed
Bram Moolenaar <Bram@vim.org>
parents:
18658
diff
changeset
|
2912 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
|
2913 orig_mouse_time = mouse_time; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2914 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
|
2915 && timediff < p_mouset |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2916 && orig_num_clicks != 4 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2917 && orig_mouse_col == mouse_col |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2918 && orig_mouse_row == mouse_row |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2919 && (is_mouse_topline(curwin) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2920 // 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
|
2921 // when window contents changes. |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2922 || (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
|
2923 ) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2924 ++orig_num_clicks; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2925 else |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2926 orig_num_clicks = 1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2927 orig_mouse_col = mouse_col; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2928 orig_mouse_row = mouse_row; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2929 set_mouse_topline(curwin); |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2930 } |
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
|
2931 # 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
|
2932 else |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2933 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
|
2934 # 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
|
2935 #else |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2936 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
|
2937 #endif |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2938 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
|
2939 } |
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
|
2940 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
|
2941 } |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2942 if (!is_drag) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2943 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
|
2944 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2945 /* |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2946 * 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
|
2947 * 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
|
2948 */ |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2949 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
|
2950 *modifiers |= MOD_MASK_SHIFT; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2951 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
|
2952 *modifiers |= MOD_MASK_CTRL; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2953 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
|
2954 *modifiers |= MOD_MASK_ALT; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2955 if (orig_num_clicks == 2) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2956 *modifiers |= MOD_MASK_2CLICK; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2957 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
|
2958 *modifiers |= MOD_MASK_3CLICK; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2959 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
|
2960 *modifiers |= MOD_MASK_4CLICK; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2961 |
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
|
2962 // 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
|
2963 // 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
|
2964 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
|
2965 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
|
2966 { |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2967 if (wheel_code & MOUSE_CTRL) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2968 *modifiers |= MOD_MASK_CTRL; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2969 if (wheel_code & MOUSE_ALT) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2970 *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
|
2971 |
d0265fdadec9
patch 8.2.1108: mouse left-right scroll is not supported in terminal window
Bram Moolenaar <Bram@vim.org>
parents:
19526
diff
changeset
|
2972 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
|
2973 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
|
2974 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
|
2975 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
|
2976 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
|
2977 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
|
2978 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
|
2979 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
|
2980 |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2981 held_button = MOUSE_RELEASE; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2982 } |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2983 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
|
2984 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
|
2985 |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2986 |
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
|
2987 // 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
|
2988 // values. |
18150
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2989 if (mouse_col >= Columns) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2990 mouse_col = Columns - 1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2991 if (mouse_row >= Rows) |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2992 mouse_row = Rows - 1; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2993 |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2994 return 0; |
0ec6521e9d80
patch 8.1.2070: mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
18141
diff
changeset
|
2995 } |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2996 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2997 // 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
|
2998 |
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 * 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
|
3001 * 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
|
3002 * "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
|
3003 * 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
|
3004 * 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
|
3005 * put in the cache. |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3006 * 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
|
3007 */ |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3008 int |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3009 mouse_comp_pos( |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3010 win_T *win, |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3011 int *rowp, |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3012 int *colp, |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3013 linenr_T *lnump, |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3014 int *plines_cache) |
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 int col = *colp; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3017 int row = *rowp; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3018 linenr_T lnum; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3019 int retval = FALSE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3020 int off; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3021 int count; |
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 #ifdef FEAT_RIGHTLEFT |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3024 if (win->w_p_rl) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3025 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
|
3026 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3027 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3028 lnum = win->w_topline; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3029 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3030 while (row > 0) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3031 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3032 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
|
3033 |
21339
608f674c6035
patch 8.2.1220: memory access error when dragging a popup window
Bram Moolenaar <Bram@vim.org>
parents:
21271
diff
changeset
|
3034 // 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
|
3035 // 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
|
3036 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
|
3037 && 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
|
3038 count = plines_cache[cache_idx]; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3039 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3040 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3041 #ifdef FEAT_DIFF |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3042 // 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
|
3043 if (win->w_p_diff |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3044 # ifdef FEAT_FOLDING |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3045 && !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
|
3046 # endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3047 ) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3048 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3049 if (lnum == win->w_topline) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3050 row -= win->w_topfill; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3051 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3052 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
|
3053 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
|
3054 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3055 else |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3056 #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
|
3057 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
|
3058 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
|
3059 plines_cache[cache_idx] = count; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3060 } |
31154
7e48ddb8b079
patch 9.0.0911: with 'smoothscroll' set mouse click position may be wrong
Bram Moolenaar <Bram@vim.org>
parents:
31144
diff
changeset
|
3061 |
7e48ddb8b079
patch 9.0.0911: with 'smoothscroll' set mouse click position may be wrong
Bram Moolenaar <Bram@vim.org>
parents:
31144
diff
changeset
|
3062 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
|
3063 { |
7e48ddb8b079
patch 9.0.0911: with 'smoothscroll' set mouse click position may be wrong
Bram Moolenaar <Bram@vim.org>
parents:
31144
diff
changeset
|
3064 // 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
|
3065 // 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
|
3066 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
|
3067 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
|
3068 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
|
3069 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
|
3070 / (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
|
3071 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
|
3072 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
|
3073 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
|
3074 } |
7e48ddb8b079
patch 9.0.0911: with 'smoothscroll' set mouse click position may be wrong
Bram Moolenaar <Bram@vim.org>
parents:
31144
diff
changeset
|
3075 |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3076 if (count > row) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3077 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
|
3078 #ifdef FEAT_FOLDING |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3079 (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
|
3080 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3081 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
|
3082 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3083 retval = TRUE; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3084 break; // past end of file |
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 row -= count; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3087 ++lnum; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3088 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3089 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3090 if (!retval) |
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 // Compute the column without wrapping. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3093 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
|
3094 if (col < off) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3095 col = off; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3096 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
|
3097 |
7e48ddb8b079
patch 9.0.0911: with 'smoothscroll' set mouse click position may be wrong
Bram Moolenaar <Bram@vim.org>
parents:
31144
diff
changeset
|
3098 // 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
|
3099 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
|
3100 col += win->w_skipcol; |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3101 } |
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 if (!win->w_p_wrap) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3104 col += win->w_leftcol; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3105 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3106 // 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
|
3107 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
|
3108 if (col <= 0) |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3109 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3110 #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
|
3111 // 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
|
3112 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
|
3113 netbeans_gutter_click(lnum); |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3114 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3115 col = 0; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3116 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3117 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3118 *colp = col; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3119 *rowp = row; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3120 *lnump = lnum; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3121 return retval; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3122 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3123 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3124 /* |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3125 * 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
|
3126 * 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
|
3127 * 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
|
3128 * 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
|
3129 * windows. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3130 * 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
|
3131 */ |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3132 win_T * |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3133 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
|
3134 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3135 frame_T *fp; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3136 win_T *wp; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3137 |
18763
49b78d6465e5
patch 8.1.2371: FEAT_TEXT_PROP is a confusing name
Bram Moolenaar <Bram@vim.org>
parents:
18691
diff
changeset
|
3138 #ifdef FEAT_PROP_POPUP |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3139 win_T *pwp = NULL; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3140 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3141 if (popup != IGNORE_POPUP) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3142 { |
18613
fa995154904e
patch 8.1.2300: redraw breaks going through list of popup windows
Bram Moolenaar <Bram@vim.org>
parents:
18508
diff
changeset
|
3143 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
|
3144 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
|
3145 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3146 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
|
3147 && *colp >= wp->w_wincol |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3148 && *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
|
3149 pwp = wp; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3150 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3151 if (pwp != NULL) |
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 if (popup == FAIL_POPUP) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3154 return NULL; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3155 *rowp -= pwp->w_winrow; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3156 *colp -= pwp->w_wincol; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3157 return pwp; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3158 } |
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 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3161 |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3162 fp = topframe; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3163 *rowp -= firstwin->w_winrow; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3164 for (;;) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3165 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3166 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
|
3167 break; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3168 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
|
3169 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3170 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
|
3171 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3172 if (*colp < fp->fr_width) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3173 break; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3174 *colp -= fp->fr_width; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3175 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3176 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3177 else // fr_layout == FR_COL |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3178 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3179 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
|
3180 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3181 if (*rowp < fp->fr_height) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3182 break; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3183 *rowp -= fp->fr_height; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3184 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3185 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3186 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3187 // 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
|
3188 // exist. |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3189 FOR_ALL_WINDOWS(wp) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3190 if (wp == fp->fr_win) |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3191 { |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3192 #ifdef FEAT_MENU |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3193 *rowp -= wp->w_winbar_height; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3194 #endif |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3195 return wp; |
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 return NULL; |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3198 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3199 |
18763
49b78d6465e5
patch 8.1.2371: FEAT_TEXT_PROP is a confusing name
Bram Moolenaar <Bram@vim.org>
parents:
18691
diff
changeset
|
3200 #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
|
3201 || 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
|
3202 /* |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3203 * 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
|
3204 * 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
|
3205 */ |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3206 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
|
3207 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
|
3208 { |
29451
057c26b5c33a
patch 9.0.0067: cannot show virtual text
Bram Moolenaar <Bram@vim.org>
parents:
29413
diff
changeset
|
3209 char_u *line; |
057c26b5c33a
patch 9.0.0067: cannot show virtual text
Bram Moolenaar <Bram@vim.org>
parents:
29413
diff
changeset
|
3210 chartabsize_T cts; |
18135
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3211 |
29451
057c26b5c33a
patch 9.0.0067: cannot show virtual text
Bram Moolenaar <Bram@vim.org>
parents:
29413
diff
changeset
|
3212 // 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
|
3213 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
|
3214 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
|
3215 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
|
3216 { |
33549
bfe07ef45143
patch 9.0.2022: getmousepos() returns wrong index for TAB char
Christian Brabandt <cb@256bit.org>
parents:
33316
diff
changeset
|
3217 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
|
3218 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
|
3219 break; |
bfe07ef45143
patch 9.0.2022: getmousepos() returns wrong index for TAB char
Christian Brabandt <cb@256bit.org>
parents:
33316
diff
changeset
|
3220 cts.cts_vcol += size; |
29451
057c26b5c33a
patch 9.0.0067: cannot show virtual text
Bram Moolenaar <Bram@vim.org>
parents:
29413
diff
changeset
|
3221 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
|
3222 } |
29451
057c26b5c33a
patch 9.0.0067: cannot show virtual text
Bram Moolenaar <Bram@vim.org>
parents:
29413
diff
changeset
|
3223 clear_chartabsize_arg(&cts); |
057c26b5c33a
patch 9.0.0067: cannot show virtual text
Bram Moolenaar <Bram@vim.org>
parents:
29413
diff
changeset
|
3224 |
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
|
3225 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
|
3226 *coladdp = vcol - cts.cts_vcol; |
29451
057c26b5c33a
patch 9.0.0067: cannot show virtual text
Bram Moolenaar <Bram@vim.org>
parents:
29413
diff
changeset
|
3227 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
|
3228 } |
1868ec23360e
patch 8.1.2062: the mouse code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3229 #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
|
3230 |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3231 #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
|
3232 /* |
759b181807f7
patch 9.0.0902: some mouse scroll code is not in a good place
Bram Moolenaar <Bram@vim.org>
parents:
31133
diff
changeset
|
3233 * "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
|
3234 */ |
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
|
3235 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
|
3236 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
|
3237 { |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3238 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
|
3239 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
|
3240 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
|
3241 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
|
3242 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
|
3243 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
|
3244 varnumber_T wincol = 0; |
28069
236b80af9833
patch 8.2.4559: getmousepos() returns the screen column
Bram Moolenaar <Bram@vim.org>
parents:
28061
diff
changeset
|
3245 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
|
3246 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
|
3247 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
|
3248 |
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
|
3249 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
|
3250 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
|
3251 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
|
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 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
|
3254 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
|
3255 |
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 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
|
3257 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
|
3258 { |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3259 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
|
3260 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
|
3261 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
|
3262 |
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
|
3263 # 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
|
3264 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
|
3265 { |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3266 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
|
3267 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
|
3268 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
|
3269 } |
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
|
3270 # 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
|
3271 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
|
3272 { |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3273 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
|
3274 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
|
3275 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
|
3276 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
|
3277 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
|
3278 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
|
3279 { |
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
|
3280 (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
|
3281 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
|
3282 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
|
3283 } |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3284 } |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3285 } |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3286 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
|
3287 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
|
3288 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
|
3289 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
|
3290 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
|
3291 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
|
3292 } |
3089b422b9dc
patch 8.1.2304: cannot get the mouse position when getting a mouse click
Bram Moolenaar <Bram@vim.org>
parents:
18613
diff
changeset
|
3293 #endif |