]> code.delx.au - gnu-emacs/blobdiff - src/termhooks.h
(set_properties, add_properties, remove_properties):
[gnu-emacs] / src / termhooks.h
index 9a96b046e4c0319beb3e223de473d83ef7c36f3e..4787e245493f4436be55f87e18fb50ebbda53944 100644 (file)
@@ -1,6 +1,6 @@
 /* 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.
 
@@ -16,7 +16,8 @@ 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.   */
@@ -58,7 +59,9 @@ 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
 };
 
 /* Return the current position of the mouse.
@@ -147,7 +150,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
@@ -183,33 +186,31 @@ extern void (*judge_scroll_bars_hook)( /* FRAME_PTR *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.  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
@@ -221,7 +222,8 @@ struct input_event {
                                   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
@@ -232,7 +234,7 @@ struct input_event {
                                   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.
@@ -245,21 +247,64 @@ struct input_event {
                                   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)
@@ -276,27 +321,41 @@ struct input_event {
    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