changeset 111733:3a6d978e6636

Fix and document components of mouse event position. src/keyboard.c (make_lispy_position): Put a meaningful value in yret when the click is on the header or mode line. doc/lispref/commands.texi (Click Events): Document the values of X, Y and COL, ROW in the event's position, when the click is on the header or mode line, on the fringes, or in the margins.
author Eli Zaretskii <eliz@gnu.org>
date Fri, 26 Nov 2010 20:15:09 +0200
parents 6098376da331
children e492c86d8f6c 1cf4eea48b69
files doc/lispref/ChangeLog doc/lispref/commands.texi src/ChangeLog src/keyboard.c
diffstat 4 files changed, 28 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/doc/lispref/ChangeLog	Fri Nov 26 11:19:00 2010 +0000
+++ b/doc/lispref/ChangeLog	Fri Nov 26 20:15:09 2010 +0200
@@ -1,3 +1,9 @@
+2010-11-26  Eli Zaretskii  <eliz@gnu.org>
+
+	* commands.texi (Click Events): Document the values of X, Y and
+	COL, ROW in the event's position, when the click is on the header
+	or mode line, on the fringes, or in the margins.
+
 2010-11-17  Eli Zaretskii  <eliz@gnu.org>
 
 	* customize.texi (Composite Types): Lower-case index entry.
--- a/doc/lispref/commands.texi	Fri Nov 26 11:19:00 2010 +0000
+++ b/doc/lispref/commands.texi	Fri Nov 26 20:15:09 2010 +0200
@@ -1285,8 +1285,12 @@
 @item @var{x}, @var{y}
 These are the pixel coordinates of the click, relative to
 the top left corner of @var{window}, which is @code{(0 . 0)}.
-For the mode or header line, @var{y} does not have meaningful data.
-For the vertical line, @var{x} does not have meaningful data.
+For a click on text, these are relative to the top left corner of
+the window's text area.  For the mode or header line, they are
+relative to the top left window edge.  For fringes, margins, and the
+vertical border, @var{x} does not have meaningful data.  For fringes
+and margins, @var{y} is relative to the bottom edge of the header
+line.
 
 @item @var{timestamp}
 This is the time at which the event occurred, in milliseconds.
@@ -1316,7 +1320,12 @@
 @item @var{col}, @var{row}
 These are the actual coordinates of the glyph under the @var{x},
 @var{y} position, possibly padded with default character width
-glyphs if @var{x} is beyond the last glyph on the line.
+glyphs if @var{x} is beyond the last glyph on the line.  For clicks on
+the header or mode line, these are measured from the top left edge of
+the header or mode line.  For clicks on the fringes and on the
+vertical border, these have no meaningful data.  For clicks on the
+margins, @var{col} is measured from the left edge of the margin area
+and @var{row} is measured from the top of the margin area.
 
 @item @var{image}
 This is the image object on which the click occurred.  It is either
@@ -1333,7 +1342,7 @@
 These are the pixel width and height of @var{object} or, if this is
 @code{nil}, those of the character glyph clicked on.
 @end table
- 
+
 @sp 1
 For mouse clicks on a scroll-bar, @var{position} has this form:
 
--- a/src/ChangeLog	Fri Nov 26 11:19:00 2010 +0000
+++ b/src/ChangeLog	Fri Nov 26 20:15:09 2010 +0200
@@ -1,3 +1,8 @@
+2010-11-26  Eli Zaretskii  <eliz@gnu.org>
+
+	* keyboard.c (make_lispy_position): Put a meaningful value in yret
+	when the click is on the header or mode line.
+
 2010-11-25  Eli Zaretskii  <eliz@gnu.org>
 
 	* xdisp.c (set_cursor_from_row): Don't forget to consider the
--- a/src/keyboard.c	Fri Nov 26 11:19:00 2010 +0000
+++ b/src/keyboard.c	Fri Nov 26 20:15:09 2010 +0200
@@ -5283,9 +5283,9 @@
 	  xret = XINT (x) - window_box_left (w, TEXT_AREA);
 	  yret = wy - WINDOW_HEADER_LINE_HEIGHT (w);
 	}
-      /* For mode line and header line clicks, return X relative to
-	 the left window edge; ignore Y.  Use mode_line_string to look
-	 for a string on the click position.  */
+      /* For mode line and header line clicks, return X, Y relative to
+	 the left window edge.  Use mode_line_string to look for a
+	 string on the click position.  */
       else if (part == ON_MODE_LINE || part == ON_HEADER_LINE)
 	{
 	  Lisp_Object string;
@@ -5305,6 +5305,7 @@
 	    ? PT : XMARKER (w->pointm)->charpos;
 
 	  xret = wx;
+	  yret = wy;
 	}
       /* For fringes and margins, Y is relative to the area's (and the
 	 window's) top edge, while X is meaningless.  */