+ 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). */
+ 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.
+ .modifiers holds the state of the
+ modifier keys.
+ .x and .y give the mouse position,
+ in characters, within the window.
+ .frame_or_window is a cons of the frame
+ in which the drop was made and a list of
+ 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
+ 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? */
+ enum event_kind kind;
+
+ /* 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;
+ enum scroll_bar_part part;
+