296
|
1 /* Hooks by which low level terminal operations
|
|
2 can be made to call other routines.
|
75227
|
3 Copyright (C) 1985, 1986, 1993, 1994, 2001, 2002, 2003, 2004,
|
|
4 2005, 2006, 2007 Free Software Foundation, Inc.
|
296
|
5
|
|
6 This file is part of GNU Emacs.
|
|
7
|
|
8 GNU Emacs is free software; you can redistribute it and/or modify
|
|
9 it under the terms of the GNU General Public License as published by
|
648
|
10 the Free Software Foundation; either version 2, or (at your option)
|
296
|
11 any later version.
|
|
12
|
|
13 GNU Emacs is distributed in the hope that it will be useful,
|
|
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16 GNU General Public License for more details.
|
|
17
|
|
18 You should have received a copy of the GNU General Public License
|
|
19 along with GNU Emacs; see the file COPYING. If not, write to
|
64084
|
20 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
21 Boston, MA 02110-1301, USA. */
|
296
|
22
|
1782
|
23
|
|
24 /* Miscellanea. */
|
|
25
|
25001
|
26 struct glyph;
|
|
27 struct frame;
|
|
28
|
1782
|
29 /* If nonzero, send all terminal output characters to this stream also. */
|
|
30 extern FILE *termscript;
|
|
31
|
21515
|
32 /* Only use prototypes when lisp.h has been included. */
|
|
33 #ifndef P_
|
|
34 #define P_(X) ()
|
|
35 #endif
|
1782
|
36
|
|
37 /* Text display hooks. */
|
296
|
38
|
25001
|
39 extern void (*cursor_to_hook) P_ ((int vpos, int hpos));
|
21515
|
40 extern void (*raw_cursor_to_hook) P_ ((int, int));
|
296
|
41
|
21515
|
42 extern void (*clear_to_end_hook) P_ ((void));
|
|
43 extern void (*clear_frame_hook) P_ ((void));
|
|
44 extern void (*clear_end_of_line_hook) P_ ((int));
|
296
|
45
|
21515
|
46 extern void (*ins_del_lines_hook) P_ ((int, int));
|
296
|
47
|
25001
|
48 extern void (*insert_glyphs_hook) P_ ((struct glyph *s, int n));
|
|
49 extern void (*write_glyphs_hook) P_ ((struct glyph *s, int n));
|
21515
|
50 extern void (*delete_glyphs_hook) P_ ((int));
|
296
|
51
|
21515
|
52 extern void (*ring_bell_hook) P_ ((void));
|
296
|
53
|
21515
|
54 extern void (*reset_terminal_modes_hook) P_ ((void));
|
|
55 extern void (*set_terminal_modes_hook) P_ ((void));
|
|
56 extern void (*update_begin_hook) P_ ((struct frame *));
|
|
57 extern void (*update_end_hook) P_ ((struct frame *));
|
|
58 extern void (*set_terminal_window_hook) P_ ((int));
|
296
|
59
|
1782
|
60
|
|
61
|
|
62 /* Multi-frame and mouse support hooks. */
|
296
|
63
|
1994
|
64 enum scroll_bar_part {
|
|
65 scroll_bar_above_handle,
|
|
66 scroll_bar_handle,
|
15176
|
67 scroll_bar_below_handle,
|
|
68 scroll_bar_up_arrow,
|
25001
|
69 scroll_bar_down_arrow,
|
|
70 scroll_bar_to_top,
|
|
71 scroll_bar_to_bottom,
|
26787
|
72 scroll_bar_end_scroll,
|
|
73 scroll_bar_move_ratio
|
1717
|
74 };
|
|
75
|
|
76 /* Return the current position of the mouse.
|
1782
|
77
|
|
78 Set *f to the frame the mouse is in, or zero if the mouse is in no
|
|
79 Emacs frame. If it is set to zero, all the other arguments are
|
|
80 garbage.
|
|
81
|
1994
|
82 If the motion started in a scroll bar, set *bar_window to the
|
|
83 scroll bar's window, *part to the part the mouse is currently over,
|
|
84 *x to the position of the mouse along the scroll bar, and *y to the
|
|
85 overall length of the scroll bar.
|
1782
|
86
|
|
87 Otherwise, set *bar_window to Qnil, and *x and *y to the column and
|
|
88 row of the character cell the mouse is over.
|
|
89
|
|
90 Set *time to the time the mouse was at the returned position.
|
|
91
|
|
92 This should clear mouse_moved until the next motion
|
|
93 event arrives. */
|
21515
|
94 extern void (*mouse_position_hook) P_ ((struct frame **f, int,
|
1782
|
95 Lisp_Object *bar_window,
|
1994
|
96 enum scroll_bar_part *part,
|
485
|
97 Lisp_Object *x,
|
|
98 Lisp_Object *y,
|
21515
|
99 unsigned long *time));
|
296
|
100
|
485
|
101 /* The window system handling code should set this if the mouse has
|
|
102 moved since the last call to the mouse_position_hook. Calling that
|
|
103 hook should clear this. */
|
|
104 extern int mouse_moved;
|
296
|
105
|
766
|
106 /* When a frame's focus redirection is changed, this hook tells the
|
357
|
107 window system code to re-decide where to put the highlight. Under
|
485
|
108 X, this means that Emacs lies about where the focus is. */
|
21515
|
109 extern void (*frame_rehighlight_hook) P_ ((struct frame *));
|
338
|
110
|
1821
|
111 /* If we're displaying frames using a window system that can stack
|
|
112 frames on top of each other, this hook allows you to bring a frame
|
|
113 to the front, or bury it behind all the other windows. If this
|
|
114 hook is zero, that means the device we're displaying on doesn't
|
|
115 support overlapping frames, so there's no need to raise or lower
|
|
116 anything.
|
|
117
|
|
118 If RAISE is non-zero, F is brought to the front, before all other
|
|
119 windows. If RAISE is zero, F is sent to the back, behind all other
|
|
120 windows. */
|
21515
|
121 extern void (*frame_raise_lower_hook) P_ ((struct frame *f, int raise));
|
1782
|
122
|
73863
|
123 /* If the value of the frame parameter changed, whis hook is called.
|
|
124 For example, if going from fullscreen to not fullscreen this hook
|
|
125 may do something OS dependent, like extended window manager hints on X11. */
|
|
126 extern void (*fullscreen_hook) P_ ((struct frame *f));
|
|
127
|
1782
|
128
|
1994
|
129 /* Scroll bar hooks. */
|
1782
|
130
|
1994
|
131 /* The representation of scroll bars is determined by the code which
|
1782
|
132 implements them, except for one thing: they must be represented by
|
|
133 lisp objects. This allows us to place references to them in
|
|
134 Lisp_Windows without worrying about those references becoming
|
1994
|
135 dangling references when the scroll bar is destroyed.
|
1782
|
136
|
|
137 The window-system-independent portion of Emacs just refers to
|
1994
|
138 scroll bars via their windows, and never looks inside the scroll bar
|
1782
|
139 representation; it always uses hook functions to do all the
|
1994
|
140 scroll bar manipulation it needs.
|
1782
|
141
|
1994
|
142 The `vertical_scroll_bar' field of a Lisp_Window refers to that
|
|
143 window's scroll bar, or is nil if the window doesn't have a
|
|
144 scroll bar.
|
1782
|
145
|
1994
|
146 The `scroll_bars' and `condemned_scroll_bars' fields of a Lisp_Frame
|
|
147 are free for use by the scroll bar implementation in any way it sees
|
1782
|
148 fit. They are marked by the garbage collector. */
|
|
149
|
|
150
|
1994
|
151 /* Set the vertical scroll bar for WINDOW to have its upper left corner
|
1782
|
152 at (TOP, LEFT), and be LENGTH rows high. Set its handle to
|
|
153 indicate that we are displaying PORTION characters out of a total
|
|
154 of WHOLE characters, starting at POSITION. If WINDOW doesn't yet
|
1994
|
155 have a scroll bar, create one for it. */
|
|
156 extern void (*set_vertical_scroll_bar_hook)
|
21515
|
157 P_ ((struct window *window,
|
|
158 int portion, int whole, int position));
|
1717
|
159
|
|
160
|
|
161 /* The following three hooks are used when we're doing a thorough
|
1994
|
162 redisplay of the frame. We don't explicitly know which scroll bars
|
1717
|
163 are going to be deleted, because keeping track of when windows go
|
|
164 away is a real pain - can you say set-window-configuration?
|
|
165 Instead, we just assert at the beginning of redisplay that *all*
|
1994
|
166 scroll bars are to be removed, and then save scroll bars from the
|
14034
|
167 fiery pit when we actually redisplay their window. */
|
1717
|
168
|
1994
|
169 /* Arrange for all scroll bars on FRAME to be removed at the next call
|
|
170 to `*judge_scroll_bars_hook'. A scroll bar may be spared if
|
49600
|
171 `*redeem_scroll_bar_hook' is applied to its window before the judgement.
|
1782
|
172
|
|
173 This should be applied to each frame each time its window tree is
|
1994
|
174 redisplayed, even if it is not displaying scroll bars at the moment;
|
|
175 if the HAS_SCROLL_BARS flag has just been turned off, only calling
|
|
176 this and the judge_scroll_bars_hook will get rid of them.
|
1717
|
177
|
1782
|
178 If non-zero, this hook should be safe to apply to any frame,
|
1994
|
179 whether or not it can support scroll bars, and whether or not it is
|
1782
|
180 currently displaying them. */
|
21515
|
181 extern void (*condemn_scroll_bars_hook) P_ ((struct frame *frame));
|
1782
|
182
|
1994
|
183 /* Unmark WINDOW's scroll bar for deletion in this judgement cycle.
|
|
184 Note that it's okay to redeem a scroll bar that is not condemned. */
|
21515
|
185 extern void (*redeem_scroll_bar_hook) P_ ((struct window *window));
|
1717
|
186
|
1994
|
187 /* Remove all scroll bars on FRAME that haven't been saved since the
|
49600
|
188 last call to `*condemn_scroll_bars_hook'.
|
1782
|
189
|
|
190 This should be applied to each frame after each time its window
|
1994
|
191 tree is redisplayed, even if it is not displaying scroll bars at the
|
|
192 moment; if the HAS_SCROLL_BARS flag has just been turned off, only
|
|
193 calling this and condemn_scroll_bars_hook will get rid of them.
|
1782
|
194
|
|
195 If non-zero, this hook should be safe to apply to any frame,
|
1994
|
196 whether or not it can support scroll bars, and whether or not it is
|
1782
|
197 currently displaying them. */
|
21515
|
198 extern void (*judge_scroll_bars_hook) P_ ((struct frame *FRAME));
|
1717
|
199
|
1782
|
200
|
|
201 /* Input queue declarations and hooks. */
|
1717
|
202
|
296
|
203 /* Expedient hack: only provide the below definitions to files that
|
6747
|
204 are prepared to handle lispy things. CONSP is defined iff lisp.h
|
485
|
205 has been included before this file. */
|
4143
|
206 #ifdef CONSP
|
296
|
207
|
2186
82e8ee492593
(selection_request_event, selection_clear_event): New event kinds.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
208 enum event_kind
|
82e8ee492593
(selection_request_event, selection_clear_event): New event kinds.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
209 {
|
45803
|
210 NO_EVENT, /* nothing happened. This should never
|
296
|
211 actually appear in the event queue. */
|
4799
|
212
|
45803
|
213 ASCII_KEYSTROKE_EVENT, /* The ASCII code is in .code, perhaps
|
4799
|
214 with modifiers applied.
|
|
215 .modifiers holds the state of the
|
|
216 modifier keys.
|
1782
|
217 .frame_or_window is the frame in
|
|
218 which the key was typed.
|
485
|
219 .timestamp gives a timestamp (in
|
|
220 milliseconds) for the keystroke. */
|
45803
|
221 MULTIBYTE_CHAR_KEYSTROKE_EVENT, /* The multibyte char code is in .code,
|
30750
|
222 perhaps with modifiers applied.
|
|
223 The others are the same as
|
48090
|
224 ASCII_KEYSTROKE_EVENT. */
|
45803
|
225 NON_ASCII_KEYSTROKE_EVENT, /* .code is a number identifying the
|
296
|
226 function key. A code N represents
|
|
227 a key whose name is
|
|
228 function_key_names[N]; function_key_names
|
|
229 is a table in keyboard.c to which you
|
|
230 should feel free to add missing keys.
|
|
231 .modifiers holds the state of the
|
338
|
232 modifier keys.
|
1782
|
233 .frame_or_window is the frame in
|
|
234 which the key was typed.
|
485
|
235 .timestamp gives a timestamp (in
|
|
236 milliseconds) for the keystroke. */
|
45803
|
237 TIMER_EVENT, /* A timer fired. */
|
|
238 MOUSE_CLICK_EVENT, /* The button number is in .code; it must
|
1312
|
239 be >= 0 and < NUM_MOUSE_BUTTONS, defined
|
|
240 below.
|
296
|
241 .modifiers holds the state of the
|
|
242 modifier keys.
|
|
243 .x and .y give the mouse position,
|
708
|
244 in characters, within the window.
|
1782
|
245 .frame_or_window gives the frame
|
|
246 the mouse click occurred in.
|
296
|
247 .timestamp gives a timestamp (in
|
|
248 milliseconds) for the click. */
|
51383
|
249 WHEEL_EVENT, /* A wheel event is generated by a
|
|
250 wheel on a mouse (e.g., MS
|
|
251 Intellimouse).
|
|
252 .modifiers holds the rotate
|
|
253 direction (up or down), and the
|
|
254 state of the modifier keys.
|
|
255 .x and .y give the mouse position,
|
|
256 in characters, within the window.
|
|
257 .frame_or_window gives the frame
|
|
258 the wheel event occurred in.
|
|
259 .timestamp gives a timestamp (in
|
|
260 milliseconds) for the event. */
|
61501
1ccfb57e0ed0
(enum event_kind) [MAC_OS]: Add LANGUAGE_CHANGE_EVENT.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
diff
changeset
|
261 #if defined (WINDOWSNT) || defined (MAC_OS)
|
1ccfb57e0ed0
(enum event_kind) [MAC_OS]: Add LANGUAGE_CHANGE_EVENT.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
diff
changeset
|
262 LANGUAGE_CHANGE_EVENT, /* A LANGUAGE_CHANGE_EVENT is
|
1ccfb57e0ed0
(enum event_kind) [MAC_OS]: Add LANGUAGE_CHANGE_EVENT.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
diff
changeset
|
263 generated on WINDOWSNT or Mac OS
|
1ccfb57e0ed0
(enum event_kind) [MAC_OS]: Add LANGUAGE_CHANGE_EVENT.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
diff
changeset
|
264 when the keyboard layout or input
|
1ccfb57e0ed0
(enum event_kind) [MAC_OS]: Add LANGUAGE_CHANGE_EVENT.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
diff
changeset
|
265 language is changed by the
|
23800
|
266 user. */
|
19700
|
267 #endif
|
45803
|
268 SCROLL_BAR_CLICK_EVENT, /* .code gives the number of the mouse button
|
1717
|
269 that was clicked.
|
|
270 .modifiers holds the state of the modifier
|
|
271 keys.
|
296
|
272 .part is a lisp symbol indicating which
|
1994
|
273 part of the scroll bar got clicked.
|
1717
|
274 .x gives the distance from the start of the
|
|
275 scroll bar of the click; .y gives the total
|
|
276 length of the scroll bar.
|
1782
|
277 .frame_or_window gives the window
|
1994
|
278 whose scroll bar was clicked in.
|
296
|
279 .timestamp gives a timestamp (in
|
|
280 milliseconds) for the click. */
|
15176
|
281 #ifdef WINDOWSNT
|
45803
|
282 W32_SCROLL_BAR_CLICK_EVENT, /* as for SCROLL_BAR_CLICK, but only generated
|
15176
|
283 by MS-Windows scroll bar controls. */
|
|
284 #endif
|
45803
|
285 SELECTION_REQUEST_EVENT, /* Another X client wants a selection from us.
|
67460
d74c30ee3772
(enum event_kind) [MAC_OS]: Add new MAC_APPLE_EVENT event.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
diff
changeset
|
286 See `struct selection_input_event'. */
|
45803
|
287 SELECTION_CLEAR_EVENT, /* Another X client cleared our selection. */
|
|
288 BUFFER_SWITCH_EVENT, /* A process filter has switched buffers. */
|
|
289 DELETE_WINDOW_EVENT, /* An X client said "delete this window". */
|
30175
|
290 MENU_BAR_EVENT, /* An event generated by the menu bar.
|
10798
|
291 The frame_or_window field's cdr holds the
|
7097
|
292 Lisp-level event value.
|
|
293 (Only the toolkit version uses these.) */
|
45803
|
294 ICONIFY_EVENT, /* An X client iconified this window. */
|
|
295 DEICONIFY_EVENT, /* An X client deiconified this window. */
|
|
296 MENU_BAR_ACTIVATE_EVENT, /* A button press in the menu bar
|
12660
|
297 (toolkit version only). */
|
45803
|
298 DRAG_N_DROP_EVENT, /* A drag-n-drop event is generated when
|
21889
|
299 files selected outside of Emacs are dropped
|
|
300 onto an Emacs window.
|
49600
|
301 .modifiers holds the state of the
|
21889
|
302 modifier keys.
|
|
303 .x and .y give the mouse position,
|
|
304 in characters, within the window.
|
67668
8926adaaf30f
(struct input_event): Fix comment for DRAG_N_DROP_EVENT.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
diff
changeset
|
305 .frame_or_window is the frame in
|
8926adaaf30f
(struct input_event): Fix comment for DRAG_N_DROP_EVENT.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
diff
changeset
|
306 which the drop was made.
|
8926adaaf30f
(struct input_event): Fix comment for DRAG_N_DROP_EVENT.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
diff
changeset
|
307 .arg is a platform-dependent
|
8926adaaf30f
(struct input_event): Fix comment for DRAG_N_DROP_EVENT.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
diff
changeset
|
308 representation of the dropped items.
|
21889
|
309 .timestamp gives a timestamp (in
|
|
310 milliseconds) for the click. */
|
30175
|
311 USER_SIGNAL_EVENT, /* A user signal.
|
|
312 code is a number identifying it,
|
25001
|
313 index into lispy_user_signals. */
|
|
314
|
30175
|
315 /* Help events. Member `frame_or_window' of the input_event is the
|
|
316 frame on which the event occurred, and member `arg' contains
|
|
317 the help to show. */
|
25001
|
318 HELP_EVENT,
|
|
319
|
30175
|
320 /* An event from a tool-bar. Member `arg' of the input event
|
|
321 contains the tool-bar item selected. If `frame_or_window'
|
|
322 and `arg' are equal, this is a prefix event. */
|
29514
|
323 TOOL_BAR_EVENT,
|
|
324
|
|
325 /* Queued from XTread_socket on FocusIn events. Translated into
|
|
326 `switch-frame' events in kbd_buffer_get_event, if necessary. */
|
43813
|
327 FOCUS_IN_EVENT,
|
|
328
|
44299
|
329 /* Generated when mouse moves over window not currently selected. */
|
|
330 SELECT_WINDOW_EVENT,
|
|
331
|
43813
|
332 /* Queued from XTread_socket when session manager sends
|
|
333 save yourself before shutdown. */
|
67460
d74c30ee3772
(enum event_kind) [MAC_OS]: Add new MAC_APPLE_EVENT event.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
diff
changeset
|
334 SAVE_SESSION_EVENT,
|
d74c30ee3772
(enum event_kind) [MAC_OS]: Add new MAC_APPLE_EVENT event.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
diff
changeset
|
335
|
d74c30ee3772
(enum event_kind) [MAC_OS]: Add new MAC_APPLE_EVENT event.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
diff
changeset
|
336 #ifdef MAC_OS
|
d74c30ee3772
(enum event_kind) [MAC_OS]: Add new MAC_APPLE_EVENT event.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
diff
changeset
|
337 /* Generated when an Apple event, a HICommand event, or a Services
|
d74c30ee3772
(enum event_kind) [MAC_OS]: Add new MAC_APPLE_EVENT event.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
diff
changeset
|
338 menu event is received and the corresponding handler is
|
d74c30ee3772
(enum event_kind) [MAC_OS]: Add new MAC_APPLE_EVENT event.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
diff
changeset
|
339 registered. Members `x' and `y' are for the event class and ID
|
70386
8fd44e40f101
(enum event_kind) [MAC_OS]: Update comment for MAC_APPLE_EVENT.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
diff
changeset
|
340 symbols, respectively. Member `arg' is a Lisp object converted
|
8fd44e40f101
(enum event_kind) [MAC_OS]: Update comment for MAC_APPLE_EVENT.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
diff
changeset
|
341 from the received Apple event. Parameters for non-Apple events
|
8fd44e40f101
(enum event_kind) [MAC_OS]: Update comment for MAC_APPLE_EVENT.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
diff
changeset
|
342 are converted to those in Apple events. */
|
80986
|
343 MAC_APPLE_EVENT,
|
|
344 #endif
|
|
345
|
80994
|
346 #ifdef HAVE_GPM
|
80986
|
347 GPM_CLICK_EVENT
|
67460
d74c30ee3772
(enum event_kind) [MAC_OS]: Add new MAC_APPLE_EVENT event.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
diff
changeset
|
348 #endif
|
2186
82e8ee492593
(selection_request_event, selection_clear_event): New event kinds.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
349 };
|
82e8ee492593
(selection_request_event, selection_clear_event): New event kinds.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
350
|
45803
|
351 /* If a struct input_event has a kind which is SELECTION_REQUEST_EVENT
|
|
352 or SELECTION_CLEAR_EVENT, then its contents are really described
|
67460
d74c30ee3772
(enum event_kind) [MAC_OS]: Add new MAC_APPLE_EVENT event.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
diff
changeset
|
353 by `struct selection_input_event'; see xterm.h. */
|
2186
82e8ee492593
(selection_request_event, selection_clear_event): New event kinds.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
354
|
82e8ee492593
(selection_request_event, selection_clear_event): New event kinds.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
355 /* The keyboard input buffer is an array of these structures. Each one
|
82e8ee492593
(selection_request_event, selection_clear_event): New event kinds.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
356 represents some sort of input event - a keystroke, a mouse click, or
|
82e8ee492593
(selection_request_event, selection_clear_event): New event kinds.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
357 a window system event. These get turned into their lispy forms when
|
82e8ee492593
(selection_request_event, selection_clear_event): New event kinds.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
358 they are removed from the event queue. */
|
82e8ee492593
(selection_request_event, selection_clear_event): New event kinds.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
359
|
14393
|
360 struct input_event
|
|
361 {
|
2186
82e8ee492593
(selection_request_event, selection_clear_event): New event kinds.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
362 /* What kind of event was this? */
|
39583
|
363 enum event_kind kind;
|
49600
|
364
|
45803
|
365 /* For an ASCII_KEYSTROKE_EVENT and MULTIBYTE_CHAR_KEYSTROKE_EVENT,
|
|
366 this is the character.
|
|
367 For a NON_ASCII_KEYSTROKE_EVENT, this is the keysym code.
|
5361
|
368 For a mouse event, this is the button number. */
|
19700
|
369 /* In WindowsNT, for a mouse wheel event, this is the delta. */
|
5226
|
370 int code;
|
1994
|
371 enum scroll_bar_part part;
|
732
|
372
|
14161
|
373 int modifiers; /* See enum below for interpretation. */
|
|
374
|
|
375 Lisp_Object x, y;
|
|
376 unsigned long timestamp;
|
|
377
|
14393
|
378 /* This is padding just to put the frame_or_window field
|
67460
d74c30ee3772
(enum event_kind) [MAC_OS]: Add new MAC_APPLE_EVENT event.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
diff
changeset
|
379 past the size of struct selection_input_event. */
|
14393
|
380 int *padding[2];
|
|
381
|
1782
|
382 /* This field is copied into a vector while the event is in the queue,
|
|
383 so that garbage collections won't kill it. */
|
10798
|
384 /* In a menu_bar_event, this is a cons cell whose car is the frame
|
|
385 and whose cdr is the Lisp object that is the event's value. */
|
14161
|
386 /* This field is last so that struct selection_input_event
|
|
387 does not overlap with it. */
|
1782
|
388 Lisp_Object frame_or_window;
|
30175
|
389
|
|
390 /* Additional event argument. This is used for TOOL_BAR_EVENTs and
|
|
391 HELP_EVENTs and avoids calling Fcons during signal handling. */
|
|
392 Lisp_Object arg;
|
296
|
393 };
|
21515
|
394
|
51568
|
395 #define EVENT_INIT(event) bzero (&(event), sizeof (struct input_event))
|
|
396
|
21515
|
397 /* Called to read input events. */
|
54168
|
398 extern int (*read_socket_hook) P_ ((int, int, struct input_event *));
|
21515
|
399
|
|
400 /* Called when a frame's display becomes entirely up to date. */
|
|
401 extern void (*frame_up_to_date_hook) P_ ((struct frame *));
|
2186
82e8ee492593
(selection_request_event, selection_clear_event): New event kinds.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
402
|
1312
|
403
|
1238
|
404 /* Bits in the modifiers member of the input_event structure.
|
|
405 Note that reorder_modifiers assumes that the bits are in canonical
|
49600
|
406 order.
|
1312
|
407
|
|
408 The modifiers applied to mouse clicks are rather ornate. The
|
|
409 window-system-specific code should store mouse clicks with
|
1319
|
410 up_modifier or down_modifier set. Having an explicit down modifier
|
|
411 simplifies some of window-system-independent code; without it, the
|
|
412 code would have to recognize down events by checking if the event
|
|
413 is a mouse click lacking the click and drag modifiers.
|
|
414
|
|
415 The window-system independent code turns all up_modifier events
|
3861
|
416 bits into drag_modifier, click_modifier, double_modifier, or
|
|
417 triple_modifier events. The click_modifier has no written
|
|
418 representation in the names of the symbols used as event heads,
|
|
419 but it does appear in the Qevent_symbol_components property of the
|
|
420 event heads. */
|
296
|
421 enum {
|
1312
|
422 up_modifier = 1, /* Only used on mouse buttons - always
|
|
423 turned into a click or a drag modifier
|
|
424 before lisp code sees the event. */
|
2659
|
425 down_modifier = 2, /* Only used on mouse buttons. */
|
|
426 drag_modifier = 4, /* This is never used in the event
|
1312
|
427 queue; it's only used internally by
|
|
428 the window-system-independent code. */
|
2659
|
429 click_modifier= 8, /* See drag_modifier. */
|
3861
|
430 double_modifier= 16, /* See drag_modifier. */
|
|
431 triple_modifier= 32, /* See drag_modifier. */
|
2659
|
432
|
|
433 /* The next four modifier bits are used also in keyboard events at
|
|
434 the Lisp level.
|
2046
|
435
|
2659
|
436 It's probably not the greatest idea to use the 2^23 bit for any
|
|
437 modifier. It may or may not be the sign bit, depending on
|
|
438 VALBITS, so using it to represent a modifier key means that
|
|
439 characters thus modified have different integer equivalents
|
|
440 depending on the architecture they're running on. Oh, and
|
|
441 applying XINT to a character whose 2^23 bit is set sign-extends
|
|
442 it, so you get a bunch of bits in the mask you didn't want.
|
|
443
|
|
444 The CHAR_ macros are defined in lisp.h. */
|
|
445 alt_modifier = CHAR_ALT, /* Under X, the XK_Alt_[LR] keysyms. */
|
|
446 super_modifier= CHAR_SUPER, /* Under X, the XK_Super_[LR] keysyms. */
|
|
447 hyper_modifier= CHAR_HYPER, /* Under X, the XK_Hyper_[LR] keysyms. */
|
|
448 shift_modifier= CHAR_SHIFT,
|
|
449 ctrl_modifier = CHAR_CTL,
|
4569
|
450 meta_modifier = CHAR_META /* Under X, the XK_Meta_[LR] keysyms. */
|
296
|
451 };
|
|
452
|
80994
|
453 #ifdef HAVE_GPM
|
80986
|
454 #include <gpm.h>
|
|
455 extern int handle_one_term_event (Gpm_Event *, struct input_event *);
|
81104
|
456 extern void term_mouse_moveto (int, int);
|
80986
|
457
|
|
458 /* Nonzero means mouse is enabled on Linux console */
|
|
459 extern int term_gpm;
|
|
460 #endif
|
|
461
|
296
|
462 #endif
|
52401
|
463
|
|
464 /* arch-tag: 33a00ecc-52b5-4186-a410-8801ac9f087d
|
|
465 (do not change this comment) */
|