\f
/* Miscellanea. */
+struct glyph;
+struct frame;
+
/* If nonzero, send all terminal output characters to this stream also. */
extern FILE *termscript;
\f
/* Text display hooks. */
-extern void (*cursor_to_hook) P_ ((int, int));
+extern void (*cursor_to_hook) P_ ((int vpos, int hpos));
extern void (*raw_cursor_to_hook) P_ ((int, int));
extern void (*clear_to_end_hook) P_ ((void));
extern void (*ins_del_lines_hook) P_ ((int, int));
-extern void (*change_line_highlight_hook) P_ ((int, int, int));
-extern void (*reassert_line_highlight_hook) P_ ((int, int));
-
-extern void (*insert_glyphs_hook) P_ ((GLYPH *, int));
-extern void (*write_glyphs_hook) P_ ((GLYPH *, int));
+extern void (*insert_glyphs_hook) P_ ((struct glyph *s, int n));
+extern void (*write_glyphs_hook) P_ ((struct glyph *s, int n));
extern void (*delete_glyphs_hook) P_ ((int));
extern void (*ring_bell_hook) P_ ((void));
scroll_bar_handle,
scroll_bar_below_handle,
scroll_bar_up_arrow,
- scroll_bar_down_arrow
+ scroll_bar_down_arrow,
+ scroll_bar_to_top,
+ scroll_bar_to_bottom,
+ scroll_bar_end_scroll,
+ scroll_bar_move_ratio
};
/* Return the current position of the mouse.
enum event_kind
{
- no_event, /* nothing happened. This should never
+ NO_EVENT, /* nothing happened. This should never
actually appear in the event queue. */
- ascii_keystroke, /* The ASCII code is in .code, perhaps
+ ASCII_KEYSTROKE_EVENT, /* The ASCII code is in .code, perhaps
with modifiers applied.
.modifiers holds the state of the
modifier keys.
which the key was typed.
.timestamp gives a timestamp (in
milliseconds) for the keystroke. */
- non_ascii_keystroke, /* .code is a number identifying the
+ MULTIBYTE_CHAR_KEYSTROKE_EVENT, /* The multibyte char code is in .code,
+ perhaps with modifiers applied.
+ The others are the same as
+ ASCII_KEYSTROKE_EVENT. This type of event
+ is generated only when we are using
+ XIM on X window. */
+ NON_ASCII_KEYSTROKE_EVENT, /* .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. */
- timer_event, /* A timer fired. */
- mouse_click, /* The button number is in .code; it must
+ TIMER_EVENT, /* A timer fired. */
+ MOUSE_CLICK_EVENT, /* 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. */
-#ifdef WINDOWSNT
- mouse_wheel, /* A mouse-wheel event is generated
- on WINDOWSNT by a
+#if defined(WINDOWSNT) || defined(MAC_OSX)
+ MOUSE_WHEEL_EVENT, /* A mouse-wheel event is generated
+ on WINDOWSNT or MAC_OSX by a
wheel on a mouse (e.g., MS Intellimouse).
The event contains a delta that corresponds
to the amount and direction that the wheel
.timestamp gives a timestamp (in
milliseconds) for the wheel event. */
#endif
- scroll_bar_click, /* .code gives the number of the mouse button
+#ifdef WINDOWSNT
+ LANGUAGE_CHANGE_EVENT, /* A LANGUAGE_CHANGE_EVENT is generated
+ on WINDOWSNT when the keyboard layout
+ or input language is changed by the
+ user. */
+#endif
+ SCROLL_BAR_CLICK_EVENT, /* .code gives the number of the mouse button
that was clicked.
.modifiers holds the state of the modifier
keys.
.timestamp gives a timestamp (in
milliseconds) for the click. */
#ifdef WINDOWSNT
- w32_scroll_bar_click, /* as for scroll_bar_click, but only generated
+ W32_SCROLL_BAR_CLICK_EVENT, /* 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.
+ 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.
+ 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
+ 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). */
- drag_n_drop /* A drag-n-drop event is generated when
+ DRAG_N_DROP_EVENT, /* A drag-n-drop event is generated when
files selected outside of Emacs are dropped
onto an Emacs window.
Currently used only on Windows NT.
the filenames of the dropped files.
.timestamp gives a timestamp (in
milliseconds) for the click. */
+ USER_SIGNAL_EVENT, /* A user signal.
+ code is a number identifying it,
+ index into lispy_user_signals. */
+
+ /* Help events. Member `frame_or_window' of the input_event is the
+ frame on which the event occurred, and member `arg' contains
+ the help to show. */
+ HELP_EVENT,
+
+ /* An event from a tool-bar. Member `arg' of the input event
+ contains the tool-bar item selected. If `frame_or_window'
+ and `arg' are equal, this is a prefix event. */
+ TOOL_BAR_EVENT,
+
+ /* Queued from XTread_socket on FocusIn events. Translated into
+ `switch-frame' events in kbd_buffer_get_event, if necessary. */
+ FOCUS_IN_EVENT,
+
+ /* Generated when mouse moves over window not currently selected. */
+ SELECT_WINDOW_EVENT,
+
+ /* Queued from XTread_socket when session manager sends
+ save yourself before shutdown. */
+ SAVE_SESSION_EVENT
};
-/* If a struct input_event has a kind which is selection_request_event
- or selection_clear_event, then its contents are really described
+/* 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
struct input_event
{
-
/* What kind of event was this? */
- int kind;
+ enum event_kind kind;
- /* For an ascii_keystroke, this is the character.
- For a non_ascii_keystroke, this is the keysym code.
+ /* For an ASCII_KEYSTROKE_EVENT and MULTIBYTE_CHAR_KEYSTROKE_EVENT,
+ this is the character.
+ For a NON_ASCII_KEYSTROKE_EVENT, this is the keysym code.
For a mouse event, this is the button number. */
/* In WindowsNT, for a mouse wheel event, this is the delta. */
int code;
/* This field is last so that struct selection_input_event
does not overlap with it. */
Lisp_Object frame_or_window;
+
+ /* Additional event argument. This is used for TOOL_BAR_EVENTs and
+ HELP_EVENTs and avoids calling Fcons during signal handling. */
+ Lisp_Object arg;
};
/* Called to read input events. */
/* Called when a frame's display becomes entirely up to date. */
extern void (*frame_up_to_date_hook) P_ ((struct frame *));
\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)
/* Bits in the modifiers member of the input_event structure.
Note that reorder_modifiers assumes that the bits are in canonical