]> code.delx.au - gnu-emacs/blobdiff - src/termhooks.h
(HAVE_RANDOM, HAVE_XSCREENNUMBEROFSCREEN, BROKEN_FIONREAD): Add definitions.
[gnu-emacs] / src / termhooks.h
index 05340f074b58c9ad33345faa53364090a877a3a7..06770c348eb06857146db0996e5e32046215b464 100644 (file)
@@ -188,18 +188,19 @@ extern int (*read_socket_hook) ();
 /* Expedient hack: only provide the below definitions to files that
    are prepared to handle lispy things.  XINT is defined iff lisp.h
    has been included before this file.  */
-#ifdef XINT
+#ifdef CONSP
 
 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
@@ -241,6 +242,7 @@ enum event_kind
   selection_request_event,     /* Another X client wants a selection from us.
                                   See `struct selection_event'.  */
   selection_clear_event,       /* Another X client cleared our selection.  */
+  delete_window_event          /* An X client said "delete this window".  */
 };
 
 /* If a struct input_event has a kind which is selection_request_event
@@ -286,28 +288,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.  */
-  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.  */
-
-  /* The next four modifier bits are used also
-     in keyboard events at the Lisp level.  */
-  alt_modifier =  0x040000,    /* Under X, the XK_Alt_[LR] keysyms.  */
-  super_modifier=  0x080000,   /* Under X, the XK_Super_[LR] keysyms.  */
-  hyper_modifier=  0x100000,   /* Under X, the XK_Hyper_[LR] keysyms.  */
-  shift_modifier=  0x200000,
-  ctrl_modifier        =  0x400000,
-  meta_modifier        =  0x800000,    /* Under X, the XK_Meta_[LR] keysyms.  */
+  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