/* Hooks by which low level terminal operations
can be made to call other routines.
- Copyright (C) 1985, 1986, 1992, 1993 Free Software Foundation, Inc.
+ Copyright (C) 1985, 1986, 1993, 1994 Free Software Foundation, Inc.
This file is part of GNU Emacs.
You should have received a copy of the GNU General Public License
along with GNU Emacs; see the file COPYING. If not, write to
-the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
+the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
\f
/* Miscellanea. */
enum scroll_bar_part {
scroll_bar_above_handle,
scroll_bar_handle,
- scroll_bar_below_handle
+ scroll_bar_below_handle,
+ scroll_bar_up_arrow,
+ scroll_bar_down_arrow
};
/* Return the current position of the mouse.
away is a real pain - can you say set-window-configuration?
Instead, we just assert at the beginning of redisplay that *all*
scroll bars are to be removed, and then save scroll bars from the
- firey pit when we actually redisplay their window. */
+ fiery pit when we actually redisplay their window. */
/* Arrange for all scroll bars on FRAME to be removed at the next call
to `*judge_scroll_bars_hook'. A scroll bar may be spared if
\f
/* Input queue declarations and hooks. */
+/* Called to read input events. */
extern int (*read_socket_hook) ();
+/* Called when a frame's display becomes entirely up to date. */
+extern int (*frame_up_to_date_hook) ();
+
/* Expedient hack: only provide the below definitions to files that
- are prepared to handle lispy things. XINT is defined iff lisp.h
+ are prepared to handle lispy things. CONSP is defined iff lisp.h
has been included before this file. */
-#ifdef XINT
+#ifdef CONSP
-/* The keyboard input buffer is an array of these structures. Each one
- represents some sort of input event - a keystroke, a mouse click, or
- a window system event. These get turned into their lispy forms when
- they are removed from the event queue. */
-
-struct input_event {
-
- /* What kind of event was this? */
- enum {
- no_event, /* nothing happened. This should never
+enum event_kind
+{
+ no_event, /* nothing happened. This should never
actually appear in the event queue. */
- ascii_keystroke, /* The ASCII code is in .code.
+
+ ascii_keystroke, /* The ASCII code is in .code, perhaps
+ with modifiers applied.
+ .modifiers holds the state of the
+ modifier keys.
.frame_or_window is the frame in
which the key was typed.
- Note that this includes meta-keys, and
- the modifiers field of the event
- is unused.
.timestamp gives a timestamp (in
milliseconds) for the keystroke. */
- non_ascii_keystroke, /* .code is a number identifying the
+ non_ascii_keystroke, /* .code is a number identifying the
function key. A code N represents
a key whose name is
function_key_names[N]; function_key_names
which the key was typed.
.timestamp gives a timestamp (in
milliseconds) for the keystroke. */
- mouse_click, /* The button number is in .code; it must
+ timer_event, /* A timer fired. */
+ mouse_click, /* The button number is in .code; it must
be >= 0 and < NUM_MOUSE_BUTTONS, defined
below.
.modifiers holds the state of the
the mouse click occurred in.
.timestamp gives a timestamp (in
milliseconds) for the click. */
- scroll_bar_click, /* .code gives the number of the mouse button
+ scroll_bar_click, /* .code gives the number of the mouse button
that was clicked.
.modifiers holds the state of the modifier
keys.
whose scroll bar was clicked in.
.timestamp gives a timestamp (in
milliseconds) for the click. */
- } kind;
+#ifdef WINDOWSNT
+ win32_scroll_bar_click, /* as for scroll_bar_click, but only generated
+ by MS-Windows scroll bar controls. */
+#endif
+ selection_request_event, /* Another X client wants a selection from us.
+ See `struct selection_event'. */
+ selection_clear_event, /* Another X client cleared our selection. */
+ buffer_switch_event, /* A process filter has switched buffers. */
+ delete_window_event, /* An X client said "delete this window". */
+ menu_bar_event, /* An event generated by the menu bar.
+ The frame_or_window field's cdr holds the
+ Lisp-level event value.
+ (Only the toolkit version uses these.) */
+ iconify_event, /* An X client iconified this window. */
+ deiconify_event, /* An X client deiconified this window. */
+ menu_bar_activate_event /* A button press in the menu bar
+ (toolkit version only). */
+};
+
+/* If a struct input_event has a kind which is selection_request_event
+ or selection_clear_event, then its contents are really described
+ by `struct selection_event'; see xterm.h. */
+
+/* The keyboard input buffer is an array of these structures. Each one
+ represents some sort of input event - a keystroke, a mouse click, or
+ a window system event. These get turned into their lispy forms when
+ they are removed from the event queue. */
+
+struct input_event
+{
+
+ /* What kind of event was this? */
+ int kind;
- Lisp_Object code;
+ /* For an ascii_keystroke, this is the character.
+ For a non_ascii_keystroke, this is the keysym code.
+ For a mouse event, this is the button number. */
+ int code;
enum scroll_bar_part part;
- /* This field is copied into a vector while the event is in the queue,
- so that garbage collections won't kill it. */
- Lisp_Object frame_or_window;
-
int modifiers; /* See enum below for interpretation. */
Lisp_Object x, y;
unsigned long timestamp;
-};
+ /* This is padding just to put the frame_or_window field
+ past the size of struct selection_event. */
+ int *padding[2];
+
+ /* This field is copied into a vector while the event is in the queue,
+ so that garbage collections won't kill it. */
+ /* In a menu_bar_event, this is a cons cell whose car is the frame
+ and whose cdr is the Lisp object that is the event's value. */
+ /* This field is last so that struct selection_input_event
+ does not overlap with it. */
+ Lisp_Object frame_or_window;
+};
+\f
/* This is used in keyboard.c, to tell how many buttons we will need
to track the positions of. */
#define NUM_MOUSE_BUTTONS (5)
is a mouse click lacking the click and drag modifiers.
The window-system independent code turns all up_modifier events
- bits into either drag_modifier or click_modifier events. The
- click_modifier has no written representation in the names of the
- symbols used as event heads, but it does appear in the
- Qevent_symbol_components property of the event heads. */
+ bits into drag_modifier, click_modifier, double_modifier, or
+ triple_modifier events. The click_modifier has no written
+ representation in the names of the symbols used as event heads,
+ but it does appear in the Qevent_symbol_components property of the
+ event heads. */
enum {
up_modifier = 1, /* Only used on mouse buttons - always
turned into a click or a drag modifier
before lisp code sees the event. */
- alt_modifier = 2, /* Under X, the XK_Alt_[LR] keysyms. */
- ctrl_modifier = 4,
- hyper_modifier= 8, /* Under X, the XK_Hyper_[LR] keysyms. */
- meta_modifier = 16, /* Under X, the XK_Meta_[LR] keysyms. */
- shift_modifier= 32,
- super_modifier= 64, /* Under X, the XK_Super_[LR] keysyms. */
- down_modifier = 128, /* Only used on mouse buttons. */
- drag_modifier = 256, /* This is never used in the event
+ down_modifier = 2, /* Only used on mouse buttons. */
+ drag_modifier = 4, /* This is never used in the event
queue; it's only used internally by
the window-system-independent code. */
- click_modifier= 512, /* See drag_modifier. */
- last_modifier /* This should always be one more than the
- highest modifier bit defined. */
+ click_modifier= 8, /* See drag_modifier. */
+ double_modifier= 16, /* See drag_modifier. */
+ triple_modifier= 32, /* See drag_modifier. */
+
+ /* The next four modifier bits are used also in keyboard events at
+ the Lisp level.
+
+ It's probably not the greatest idea to use the 2^23 bit for any
+ modifier. It may or may not be the sign bit, depending on
+ VALBITS, so using it to represent a modifier key means that
+ characters thus modified have different integer equivalents
+ depending on the architecture they're running on. Oh, and
+ applying XINT to a character whose 2^23 bit is set sign-extends
+ it, so you get a bunch of bits in the mask you didn't want.
+
+ The CHAR_ macros are defined in lisp.h. */
+ alt_modifier = CHAR_ALT, /* Under X, the XK_Alt_[LR] keysyms. */
+ super_modifier= CHAR_SUPER, /* Under X, the XK_Super_[LR] keysyms. */
+ hyper_modifier= CHAR_HYPER, /* Under X, the XK_Hyper_[LR] keysyms. */
+ shift_modifier= CHAR_SHIFT,
+ ctrl_modifier = CHAR_CTL,
+ meta_modifier = CHAR_META /* Under X, the XK_Meta_[LR] keysyms. */
};
#endif