Trailing whitespace deleted.
[bpt/emacs.git] / src / termhooks.h
index 94bdc0d..443e4c6 100644 (file)
@@ -16,40 +16,45 @@ GNU General Public License for more details.
 
 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.   */
 
+struct glyph;
+struct frame;
+
 /* If nonzero, send all terminal output characters to this stream also.  */
 extern FILE *termscript;
 
+/* Only use prototypes when lisp.h has been included.  */
+#ifndef P_
+#define P_(X) ()
+#endif
 \f
 /* Text display hooks.  */
 
-extern int (*cursor_to_hook) ();
-extern int (*raw_cursor_to_hook) ();
-
-extern int (*clear_to_end_hook) ();
-extern int (*clear_frame_hook) ();
-extern int (*clear_end_of_line_hook) ();
+extern void (*cursor_to_hook) P_ ((int vpos, int hpos));
+extern void (*raw_cursor_to_hook) P_ ((int, int));
 
-extern int (*ins_del_lines_hook) ();
+extern void (*clear_to_end_hook) P_ ((void));
+extern void (*clear_frame_hook) P_ ((void));
+extern void (*clear_end_of_line_hook) P_ ((int));
 
-extern int (*change_line_highlight_hook) ();
-extern int (*reassert_line_highlight_hook) ();
+extern void (*ins_del_lines_hook) P_ ((int, int));
 
-extern int (*insert_glyphs_hook) ();
-extern int (*write_glyphs_hook) ();
-extern int (*delete_glyphs_hook) ();
+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 int (*ring_bell_hook) ();
+extern void (*ring_bell_hook) P_ ((void));
 
-extern int (*reset_terminal_modes_hook) ();
-extern int (*set_terminal_modes_hook) ();
-extern int (*update_begin_hook) ();
-extern int (*update_end_hook) ();
-extern int (*set_terminal_window_hook) ();
+extern void (*reset_terminal_modes_hook) P_ ((void));
+extern void (*set_terminal_modes_hook) P_ ((void));
+extern void (*update_begin_hook) P_ ((struct frame *));
+extern void (*update_end_hook) P_ ((struct frame *));
+extern void (*set_terminal_window_hook) P_ ((int));
 
 
 \f
@@ -58,7 +63,13 @@ extern int (*set_terminal_window_hook) ();
 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,
+  scroll_bar_to_top,
+  scroll_bar_to_bottom,
+  scroll_bar_end_scroll,
+  scroll_bar_move_ratio
 };
 
 /* Return the current position of the mouse.
@@ -79,12 +90,12 @@ enum scroll_bar_part {
 
    This should clear mouse_moved until the next motion
    event arrives.  */
-extern void (*mouse_position_hook) ( /* FRAME_PTR *f,
+extern void (*mouse_position_hook) P_ ((struct frame **f, int,
                                        Lisp_Object *bar_window,
                                        enum scroll_bar_part *part,
                                        Lisp_Object *x,
                                        Lisp_Object *y,
-                                       unsigned long *time */ );
+                                       unsigned long *time));
 
 /* The window system handling code should set this if the mouse has
    moved since the last call to the mouse_position_hook.  Calling that
@@ -94,7 +105,7 @@ extern int mouse_moved;
 /* When a frame's focus redirection is changed, this hook tells the
    window system code to re-decide where to put the highlight.  Under
    X, this means that Emacs lies about where the focus is.  */
-extern void (*frame_rehighlight_hook) ( /* void */ );
+extern void (*frame_rehighlight_hook) P_ ((struct frame *));
 
 /* If we're displaying frames using a window system that can stack
    frames on top of each other, this hook allows you to bring a frame
@@ -106,7 +117,7 @@ extern void (*frame_rehighlight_hook) ( /* void */ );
    If RAISE is non-zero, F is brought to the front, before all other
    windows.  If RAISE is zero, F is sent to the back, behind all other
    windows.  */
-extern void (*frame_raise_lower_hook) ( /* FRAME_PTR f, int raise */ );
+extern void (*frame_raise_lower_hook) P_ ((struct frame *f, int raise));
 
 \f
 /* Scroll bar hooks.  */
@@ -137,8 +148,8 @@ extern void (*frame_raise_lower_hook) ( /* FRAME_PTR f, int raise */ );
    of WHOLE characters, starting at POSITION.  If WINDOW doesn't yet
    have a scroll bar, create one for it.  */
 extern void (*set_vertical_scroll_bar_hook)
-            ( /* struct window *window,
-                int portion, int whole, int position */ );
+            P_ ((struct window *window,
+                int portion, int whole, int position));
 
 
 /* The following three hooks are used when we're doing a thorough
@@ -147,7 +158,7 @@ extern void (*set_vertical_scroll_bar_hook)
    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
@@ -161,11 +172,11 @@ extern void (*set_vertical_scroll_bar_hook)
    If non-zero, this hook should be safe to apply to any frame,
    whether or not it can support scroll bars, and whether or not it is
    currently displaying them.  */
-extern void (*condemn_scroll_bars_hook)( /* FRAME_PTR *frame */ );
+extern void (*condemn_scroll_bars_hook) P_ ((struct frame *frame));
 
 /* Unmark WINDOW's scroll bar for deletion in this judgement cycle.
    Note that it's okay to redeem a scroll bar that is not condemned.  */
-extern void (*redeem_scroll_bar_hook)( /* struct window *window */ );
+extern void (*redeem_scroll_bar_hook) P_ ((struct window *window));
 
 /* Remove all scroll bars on FRAME that haven't been saved since the
    last call to `*condemn_scroll_bars_hook'.  
@@ -178,17 +189,11 @@ extern void (*redeem_scroll_bar_hook)( /* struct window *window */ );
    If non-zero, this hook should be safe to apply to any frame,
    whether or not it can support scroll bars, and whether or not it is
    currently displaying them.  */
-extern void (*judge_scroll_bars_hook)( /* FRAME_PTR *FRAME */ );
+extern void (*judge_scroll_bars_hook) P_ ((struct frame *FRAME));
 
 \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.  CONSP is defined iff lisp.h
    has been included before this file.  */
@@ -196,10 +201,10 @@ extern int (*frame_up_to_date_hook) ();
 
 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.
@@ -207,7 +212,11 @@ enum event_kind
                                   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.  */
+  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
@@ -219,7 +228,8 @@ enum event_kind
                                   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_EVENT,           /* The button number is in .code; it must
                                   be >= 0 and < NUM_MOUSE_BUTTONS, defined
                                   below.
                                   .modifiers holds the state of the
@@ -230,7 +240,31 @@ enum event_kind
                                   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
+#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
+                                  is rotated.  This delta is typically
+                                  used to implement a scroll or zoom.
+                                  .code gives the delta.
+                                  .modifiers holds the state of the
+                                  modifier keys.
+                                  .x and .y give the mouse position,
+                                  in characters, within the window.
+                                  .frame_or_window gives the frame
+                                  the wheel event occurred in.
+                                  .timestamp gives a timestamp (in
+                                  milliseconds) for the wheel event.  */
+#endif
+#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.
@@ -243,23 +277,64 @@ enum event_kind
                                   whose scroll bar was clicked in.
                                   .timestamp gives a timestamp (in
                                   milliseconds) for the click.  */
-  selection_request_event,     /* Another X client wants a selection from us.
+#ifdef WINDOWSNT
+  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.
                                   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_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
+/* 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
@@ -267,32 +342,47 @@ enum event_kind
    a window system event.  These get turned into their lispy forms when
    they are removed from the event queue.  */
 
-struct input_event {
-
+struct input_event
+{
   /* What kind of event was this?  */
   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;
   enum scroll_bar_part part;
 
+  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;
 
-  int modifiers;               /* See enum below for interpretation.  */
-
-  Lisp_Object x, y;
-  unsigned long timestamp;
+  /* 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.  */
+extern int (*read_socket_hook) P_ ((int, struct input_event *, int, int));
+
+/* 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