diff src/events.c @ 149:538048ae2ab8 r20-3b1

Import from CVS: tag r20-3b1
author cvs
date Mon, 13 Aug 2007 09:36:16 +0200
parents 9b50b4588a93
children 25f70ba0133c
line wrap: on
line diff
--- a/src/events.c	Mon Aug 13 09:35:15 2007 +0200
+++ b/src/events.c	Mon Aug 13 09:36:16 2007 +0200
@@ -63,7 +63,7 @@
 Lisp_Object Qmouse_event_p;
 Lisp_Object Qprocess_event_p;
 
-Lisp_Object Qkey_press, Qbutton_press, Qbutton_release, Qmisc_user;
+Lisp_Object Qkey_press, Qbutton_press, Qbutton_release, Qmisc_user, Qempty;
 Lisp_Object Qascii_character;
 
 /* #### Ad-hoc hack.  Should be part of define_lrecord_implementation */
@@ -185,25 +185,18 @@
 	break;
       }
     case process_event:
-      {
 	write_c_string ("#<process-event ", printcharfun);
 	print_internal (XEVENT (obj)->event.process.process, printcharfun, 1);
 	break;
-      }
     case timeout_event:
-      {
 	write_c_string ("#<timeout-event ", printcharfun);
 	print_internal (XEVENT (obj)->event.timeout.object, printcharfun, 1);
 	break;
-      }
     case empty_event:
-      {
 	write_c_string ("#<empty-event", printcharfun);
 	break;
-      }
     case misc_user_event:
     case eval_event:
-      {
 	write_c_string ("#<", printcharfun);
 	if (XEVENT (obj)->event_type == misc_user_event)
 	  write_c_string ("misc-user", printcharfun);
@@ -215,18 +208,13 @@
 	print_internal (XEVENT (obj)->event.eval.object, printcharfun, 1);
 	write_c_string (")", printcharfun);
 	break;
-      }
     case dead_event:
-      {
 	write_c_string ("#<DEALLOCATED-EVENT", printcharfun);
 	break;
-      }
     default:
-      {
 	write_c_string ("#<UNKNOWN-EVENT-TYPE", printcharfun);
 	break;
       }
-    }
   write_c_string (">", printcharfun);
 }
   
@@ -242,53 +230,39 @@
   switch (e1->event_type)
     {
     case process_event:
-      return (EQ (e1->event.process.process,
-		  e2->event.process.process));
+      return EQ (e1->event.process.process, e2->event.process.process);
     
     case timeout_event:
-      if (NILP (Fequal (e1->event.timeout.function,
-			e2->event.timeout.function)))
-	return 0;
-      if (NILP (Fequal (e1->event.timeout.object,
-			e2->event.timeout.object)))
-	return 0;
-      return 1;
+      return (!NILP (Fequal (e1->event.timeout.function,
+			     e2->event.timeout.function)) &&
+	      !NILP (Fequal (e1->event.timeout.object,
+			     e2->event.timeout.object)));
     
     case key_press_event:
-      return ((EQ (e1->event.key.keysym,
-                   e2->event.key.keysym)
-               && (e1->event.key.modifiers
-                   == e2->event.key.modifiers)));
+      return (EQ (e1->event.key.keysym, e2->event.key.keysym) &&
+	      (e1->event.key.modifiers == e2->event.key.modifiers));
 
     case button_press_event:
     case button_release_event:
-      return (((e1->event.button.button
-                == e2->event.button.button)
-               && (e1->event.button.modifiers
-                   == e2->event.button.modifiers)));
+      return (e1->event.button.button    == e2->event.button.button &&
+	      e1->event.button.modifiers == e2->event.button.modifiers);
 
     case pointer_motion_event:
-      return ((e1->event.motion.x == e2->event.motion.x
-               && e1->event.motion.y == e2->event.motion.y));
+      return (e1->event.motion.x == e2->event.motion.x &&
+	      e1->event.motion.y == e2->event.motion.y);
 
     case misc_user_event:
     case eval_event:
-      if (NILP (Fequal (e1->event.eval.function,
-			e2->event.eval.function)))
-	return 0;
-      if (NILP (Fequal (e1->event.eval.object,
-			e2->event.eval.object)))
-	return 0;
-      return 1;
+      return (!NILP (Fequal (e1->event.eval.function,
+			     e2->event.eval.function)) &&
+	      !NILP (Fequal (e1->event.eval.object,
+			     e2->event.eval.object)));
 
     case magic_eval_event:
-      if (e1->event.magic_eval.internal_function !=
-	  e2->event.magic_eval.internal_function)
-	return 0;
-      if (NILP (Fequal (e1->event.magic_eval.object,
-			e2->event.magic_eval.object)))
-	return 0;
-      return 1;
+      return (e1->event.magic_eval.internal_function ==
+	      e2->event.magic_eval.internal_function &&
+	      !NILP (Fequal (e1->event.magic_eval.object,
+			     e2->event.magic_eval.object)));
 
     case magic_event:
       {
@@ -299,12 +273,16 @@
 #ifdef HAVE_X_WINDOWS
 	/* XEvent is actually a union which means that we can't just use == */
 	if (CONSOLE_X_P (XCONSOLE (console)))
-	  return (!memcmp ((XEvent *) &e1->event.magic.underlying_x_event,
+	  return !memcmp ((XEvent *) &e1->event.magic.underlying_x_event,
 			   (XEvent *) &e2->event.magic.underlying_x_event,
-			   sizeof (e1->event.magic.underlying_x_event)));
+			  sizeof (e1->event.magic.underlying_x_event));
 #endif
+#ifdef HAVE_TTY
+	if (CONSOLE_TTY_P (XCONSOLE (console)))
 	return (e1->event.magic.underlying_tty_event ==
 		e2->event.magic.underlying_tty_event);
+#endif
+	return 1;
       }
 
     case empty_event:      /* Empty and deallocated events are equal. */
@@ -960,7 +938,7 @@
     case eval_event:		strcpy (buf, "eval"); 	return;
     case process_event:		strcpy (buf, "process");return;
     case timeout_event:		strcpy (buf, "timeout");return;
-    case empty_event:		strcpy (buf, "EMPTY-EVENT"); return;
+    case empty_event:		strcpy (buf, "empty"); return;
     case dead_event:		strcpy (buf, "DEAD-EVENT");  return;
     default:
       abort ();
@@ -1023,7 +1001,7 @@
 */
        (object))
 {
-  return ((EVENTP (object)) ? Qt : Qnil);
+  return EVENTP (object) ? Qt : Qnil;
 }
 
 DEFUN ("event-live-p", Fevent_live_p, 1, 1, 0, /*
@@ -1031,18 +1009,17 @@
 */
        (object))
 {
-  return ((EVENTP (object) && XEVENT (object)->event_type != dead_event)
-	  ? Qt : Qnil);
+  return EVENTP (object) && XEVENT (object)->event_type != dead_event ?
+    Qt : Qnil;
 }
 
 #if 0 /* debugging functions */
 
-xxDEFUN ("event-next", Fevent_next, Sevent_next, 1, 1, 0 /*
+xxDEFUN ("event-next", Fevent_next, 1, 1, 0, /*
 Return the event object's `next' event, or nil if it has none.
 The `next-event' field is changed by calling `set-next-event'.
-*/ )
-     (event)
-     Lisp_Object event;
+*/
+	 (event))
 {
   struct Lisp_Event *e;
   CHECK_LIVE_EVENT (event);
@@ -1050,12 +1027,11 @@
   return XEVENT_NEXT (event);
 }
 
-xxDEFUN ("set-event-next", Fset_event_next, Sset_event_next, 2, 2, 0 /*
+xxDEFUN ("set-event-next", Fset_event_next, 2, 2, 0, /*
 Set the `next event' of EVENT to NEXT-EVENT.
 NEXT-EVENT must be an event object or nil.
-*/ )
-     (event, next_event)
-     Lisp_Object event, next_event;
+*/
+	 (event, next_event))
 {
   Lisp_Object ev;
 
@@ -1078,7 +1054,7 @@
 			     next_event));
     }
   XSET_EVENT_NEXT (event, next_event);
-  return (next_event);
+  return next_event;
 }
 
 #endif /* 0 */
@@ -1105,30 +1081,14 @@
   CHECK_LIVE_EVENT (event);
   switch (XEVENT (event)->event_type)
     {
-    case key_press_event:
-      return Qkey_press;
-
-    case button_press_event:
-      return Qbutton_press;
-
-    case button_release_event:
-      return Qbutton_release;
-
-    case misc_user_event:
-      return Qmisc_user;
-
-    case pointer_motion_event:
-      return Qmotion;
-
-    case process_event:
-      return Qprocess;
-
-    case timeout_event:
-      return Qtimeout;
-
-    case eval_event:
-      return Qeval;
-
+    case key_press_event:	return Qkey_press;
+    case button_press_event:	return Qbutton_press;
+    case button_release_event:	return Qbutton_release;
+    case misc_user_event:	return Qmisc_user;
+    case pointer_motion_event:	return Qmotion;
+    case process_event:		return Qprocess;
+    case timeout_event:		return Qtimeout;
+    case eval_event:		return Qeval;
     case magic_event:
     case magic_eval_event:
       return Qmagic;
@@ -1143,7 +1103,7 @@
 }
 
 DEFUN ("event-timestamp", Fevent_timestamp, 1, 1, 0, /*
-Return the timestamp of the given event object.
+Return the timestamp of the event object EVENT.
 */
        (event))
 {
@@ -1168,17 +1128,17 @@
 }
 
 DEFUN ("event-key", Fevent_key, 1, 1, 0, /*
-Return the Keysym of the given key-press event.
-This will be the ASCII code of a printing character, or a symbol.
+Return the Keysym of the key-press event EVENT.
+This will be a character if the event is associated with one, else a symbol.
 */
        (event))
 {
   CHECK_EVENT_TYPE (event, key_press_event, Qkey_press_event_p);
-  return (XEVENT (event)->event.key.keysym);
+  return XEVENT (event)->event.key.keysym;
 }
 
 DEFUN ("event-button", Fevent_button, 1, 1, 0, /*
-Return the button-number of the given mouse-button-press event.
+Return the button-number of the given button-press or button-release event.
 */
        (event))
 {
@@ -1274,10 +1234,10 @@
 }
 
 DEFUN ("event-window-x-pixel", Fevent_window_x_pixel, 1, 1, 0, /*
-Return the X position in pixels of the given mouse event.
+Return the X position in pixels of mouse event EVENT.
 The value returned is relative to the window the event occurred in.
-This will signal an error if the event is not a mouse-motion, button-press,
-or button-release event.  See also `event-x-pixel'.
+This will signal an error if the event is not a mouse event.
+See also `mouse-event-p' and `event-x-pixel'.
 */
        (event))
 {
@@ -1292,10 +1252,10 @@
 }
 
 DEFUN ("event-window-y-pixel", Fevent_window_y_pixel, 1, 1, 0, /*
-Return the Y position in pixels of the given mouse event.
+Return the Y position in pixels of mouse event EVENT.
 The value returned is relative to the window the event occurred in.
-This will signal an error if the event is not a mouse-motion, button-press,
-or button-release event.  See also `event-y-pixel'.
+This will signal an error if the event is not a mouse event.
+See also `mouse-event-p' and `event-y-pixel'.
 */
        (event))
 {
@@ -1310,10 +1270,10 @@
 }
 
 DEFUN ("event-x-pixel", Fevent_x_pixel, 1, 1, 0, /*
-Return the X position in pixels of the given mouse event.
+Return the X position in pixels of mouse event EVENT.
 The value returned is relative to the frame the event occurred in.
-This will signal an error if the event is not a mouse-motion, button-press,
-or button-release event.  See also `event-window-x-pixel'.
+This will signal an error if the event is not a mouse event.
+See also `mouse-event-p' and `event-window-x-pixel'.
 */
        (event))
 {
@@ -1328,10 +1288,10 @@
 }
 
 DEFUN ("event-y-pixel", Fevent_y_pixel, 1, 1, 0, /*
-Return the Y position in pixels of the given mouse event.
+Return the Y position in pixels of mouse event EVENT.
 The value returned is relative to the frame the event occurred in.
-This will signal an error if the event is not a mouse-motion, button-press,
-or button-release event.  See also `event-window-y-pixel'.
+This will signal an error if the event is not a mouse event.
+See also `mouse-event-p' `event-window-y-pixel'.
 */
        (event))
 {
@@ -1454,56 +1414,44 @@
 }
 
 DEFUN ("event-over-text-area-p", Fevent_over_text_area_p, 1, 1, 0, /*
-Return whether the given mouse event occurred over the text area of a window.
+Return t if the mouse event EVENT occurred over the text area of a window.
 The modeline is not considered to be part of the text area.
 */
        (event))
 {
   int result = event_pixel_translation (event, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
 
-  if (result == OVER_TEXT || result == OVER_NOTHING)
-    return Qt;
-  else
-    return Qnil;
+  return result == OVER_TEXT || result == OVER_NOTHING ? Qt : Qnil;
 }
 
 DEFUN ("event-over-modeline-p", Fevent_over_modeline_p, 1, 1, 0, /*
-Return whether the given mouse event occurred over the modeline of a window.
+Return t if the mouse event EVENT occurred over the modeline of a window.
 */
        (event))
 {
   int result = event_pixel_translation (event, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
 
-  if (result == OVER_MODELINE)
-    return Qt;
-  else
-    return Qnil;
+  return result == OVER_MODELINE ? Qt : Qnil;
 }
 
 DEFUN ("event-over-border-p", Fevent_over_border_p, 1, 1, 0, /*
-Return whether the given mouse event occurred over an internal border.
+Return t if the mouse event EVENT occurred over an internal border.
 */
        (event))
 {
   int result = event_pixel_translation (event, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
 
-  if (result == OVER_BORDER)
-    return Qt;
-  else
-    return Qnil;
+  return result == OVER_BORDER ? Qt : Qnil;
 }
 
 DEFUN ("event-over-toolbar-p", Fevent_over_toolbar_p, 1, 1, 0, /*
-Return whether the given mouse event occurred over a toolbar.
+Return t if the mouse event EVENT occurred over a toolbar.
 */
        (event))
 {
   int result = event_pixel_translation (event, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
 
-  if (result == OVER_TOOLBAR)
-    return Qt;
-  else
-    return Qnil;
+  return result == OVER_TOOLBAR ? Qt : Qnil;
 }
 
 struct console *
@@ -1519,7 +1467,7 @@
 }
 
 DEFUN ("event-channel", Fevent_channel, 1, 1, 0, /*
-Return the channel that the given event occurred on.
+Return the channel that the event EVENT occurred on.
 This will be a frame, device, console, or nil for some types
 of events (e.g. eval events).
 */
@@ -1530,14 +1478,13 @@
 }
 
 DEFUN ("event-window", Fevent_window, 1, 1, 0, /*
-Return the window of the given mouse event.
+Return the window over which mouse event EVENT occurred.
 This may be nil if the event occurred in the border or over a toolbar.
-The modeline is considered to be in the window it represents.
+The modeline is considered to be within the window it describes.
 */
        (event))
 {
   struct window *w;
-  Lisp_Object window;
 
   event_pixel_translation (event, 0, 0, 0, 0, &w, 0, 0, 0, 0, 0);
 
@@ -1545,15 +1492,17 @@
     return Qnil;
   else
     {
+      Lisp_Object window;
+
       XSETWINDOW (window, w);
       return window;
     }
 }
 
 DEFUN ("event-point", Fevent_point, 1, 1, 0, /*
-Return the character position of the given mouse event.
+Return the character position of the mouse event EVENT.
 If the event did not occur over a window, or did not occur over text,
-then this returns nil.  Otherwise, it returns an index into the buffer
+then this returns nil.  Otherwise, it returns a position in the buffer
 visible in the event's window.
 */
        (event))
@@ -1563,16 +1512,11 @@
 
   event_pixel_translation (event, 0, 0, 0, 0, &w, &bufp, 0, 0, 0, 0);
 
-  if (!w)
-    return Qnil;
-  else if (!bufp)
-    return Qnil;
-  else
-    return make_int (bufp);
+  return w && bufp ? make_int (bufp) : Qnil;
 }
 
 DEFUN ("event-closest-point", Fevent_closest_point, 1, 1, 0, /*
-Return the character position of the given mouse event.
+Return the character position closest to the mouse event EVENT.
 If the event did not occur over a window or over text, return the
 closest point to the location of the event.  If the Y pixel position
 overlaps a window and the X pixel position is to the left of that
@@ -1580,8 +1524,8 @@
 Y position.  If the Y pixel position overlaps a window and the X pixel
 position is to the right of that window, the closest point is the end
 of the line containing the Y position.  If the Y pixel position is
-above a window, return 0.  If it is below a window, return the value
-of (window-end).
+above a window, return 0.  If it is below the last character in a window,
+return the value of (window-end).
 */
        (event))
 {
@@ -1589,14 +1533,11 @@
 
   event_pixel_translation (event, 0, 0, 0, 0, 0, 0, &bufp, 0, 0, 0);
 
-  if (!bufp)
-    return Qnil;
-  else
-    return make_int (bufp);
+  return bufp ? make_int (bufp) : Qnil;
 }
 
 DEFUN ("event-x", Fevent_x, 1, 1, 0, /*
-Return the X position of the given mouse event in characters.
+Return the X position of the mouse event EVENT in characters.
 This is relative to the window the event occurred over.
 */
        (event))
@@ -1609,7 +1550,7 @@
 }
 
 DEFUN ("event-y", Fevent_y, 1, 1, 0, /*
-Return the Y position of the given mouse event in characters.
+Return the Y position of the mouse event EVENT in characters.
 This is relative to the window the event occurred over.
 */
        (event))
@@ -1636,14 +1577,11 @@
 
   event_pixel_translation (event, 0, 0, 0, 0, 0, 0, 0, &mbufp, 0, 0);
 
-  if (mbufp < 0)
-    return Qnil;
-  else
-    return make_int (mbufp);
+  return mbufp < 0 ? Qnil : make_int (mbufp);
 }
 
 DEFUN ("event-glyph", Fevent_glyph, 1, 1, 0, /*
-Return the glyph that the given mouse event occurred over, or nil.
+Return the glyph that the mouse event EVENT occurred over, or nil.
 */
        (event))
 {
@@ -1652,16 +1590,11 @@
 
   event_pixel_translation (event, 0, 0, 0, 0, &w, 0, 0, 0, &glyph, 0);
 
-  if (!w)
-    return Qnil;
-  else if (GLYPHP (glyph))
-    return glyph;
-  else
-    return Qnil;
+  return w && GLYPHP (glyph) ? glyph : Qnil;
 }
 
 DEFUN ("event-glyph-extent", Fevent_glyph_extent, 1, 1, 0, /*
-Return the extent of the glyph that the given mouse event occurred over.
+Return the extent of the glyph that the mouse event EVENT occurred over.
 If the event did not occur over a glyph, nil is returned.
 */
        (event))
@@ -1671,12 +1604,7 @@
 
   event_pixel_translation (event, 0, 0, 0, 0, &w, 0, 0, 0, 0, &extent);
 
-  if (!w)
-    return Qnil;
-  else if (EXTENTP (extent))
-    return extent;
-  else
-    return Qnil;
+  return w && EXTENTP (extent) ? extent : Qnil;
 }
 
 DEFUN ("event-glyph-x-pixel", Fevent_glyph_x_pixel, 1, 1, 0, /*
@@ -1692,10 +1620,7 @@
 
   event_pixel_translation (event, 0, 0, &obj_x, 0, &w, 0, 0, 0, 0, &extent);
 
-  if (w && EXTENTP (extent))
-    return make_int (obj_x);
-  else
-    return Qnil;
+  return w && EXTENTP (extent) ? make_int (obj_x) : Qnil;
 }
 
 DEFUN ("event-glyph-y-pixel", Fevent_glyph_y_pixel, 1, 1, 0, /*
@@ -1711,34 +1636,24 @@
 
   event_pixel_translation (event, 0, 0, 0, &obj_y, &w, 0, 0, 0, 0, &extent);
 
-  if (w && EXTENTP (extent))
-    return make_int (obj_y);
-  else
-    return Qnil;
+  return w && EXTENTP (extent) ? make_int (obj_y) : Qnil;
 }
 
 DEFUN ("event-toolbar-button", Fevent_toolbar_button, 1, 1, 0, /*
-Return the toolbar button that the given mouse event occurred over.
-If the event did not occur over a toolbar, nil is returned.
+Return the toolbar button that the mouse event EVENT occurred over.
+If the event did not occur over a toolbar button, nil is returned.
 */
        (event))
 {
 #ifdef HAVE_TOOLBARS
   Lisp_Object button;
-  int result;
 
-  result = event_pixel_translation (event, 0, 0, 0, 0, 0, 0, 0, 0, &button, 0);
+  int result = event_pixel_translation (event, 0, 0, 0, 0, 0, 0, 0, 0, &button, 0);
 
-  if (result == OVER_TOOLBAR)
-    {
-      if (TOOLBAR_BUTTONP (button))
-	return button;
-      else
+  return result == OVER_TOOLBAR && TOOLBAR_BUTTONP (button) ? button : Qnil;
+#else
 	return Qnil;
-    }
-  else
 #endif
-    return Qnil;
 }
 
 DEFUN ("event-process", Fevent_process, 1, 1, 0, /*
@@ -1747,7 +1662,7 @@
        (event))
 {
   CHECK_EVENT_TYPE (event, process_event, Qprocess_event_p);
-  return (XEVENT (event)->event.process.process);
+  return XEVENT (event)->event.process.process;
 }
 
 DEFUN ("event-function", Fevent_function, 1, 1, 0, /*
@@ -1846,7 +1761,10 @@
 
     case magic_eval_event:
     case magic_event:
+      break;
+
     case empty_event:
+      RETURN_UNGCPRO (Qnil);
       break;
 
     default:
@@ -1918,6 +1836,7 @@
   defsymbol (&Qbutton_press, "button-press");
   defsymbol (&Qbutton_release, "button-release");
   defsymbol (&Qmisc_user, "misc-user");
+  defsymbol (&Qempty, "empty");
   defsymbol (&Qascii_character, "ascii-character");
 }