From 8547874a7cfa4e353f0307c8b614e802d8abfc21 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Fri, 26 Nov 2010 20:15:09 +0200 Subject: [PATCH] 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. --- doc/lispref/ChangeLog | 6 ++++++ doc/lispref/commands.texi | 17 +++++++++++++---- src/ChangeLog | 5 +++++ src/keyboard.c | 7 ++++--- 4 files changed, 28 insertions(+), 7 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 8f57bc45da5..d1c2d861eb7 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,9 @@ +2010-11-26 Eli Zaretskii + + * 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 * customize.texi (Composite Types): Lower-case index entry. diff --git a/doc/lispref/commands.texi b/doc/lispref/commands.texi index 17cfcc0def8..d83396750ca 100644 --- a/doc/lispref/commands.texi +++ b/doc/lispref/commands.texi @@ -1285,8 +1285,12 @@ input stream. @xref{Key Sequence Input}. @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 @@ the window. @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 @@ left corner of the character glyph clicked on. 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: diff --git a/src/ChangeLog b/src/ChangeLog index 61ef9a202a8..eac550a7334 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2010-11-26 Eli Zaretskii + + * 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 * xdisp.c (set_cursor_from_row): Don't forget to consider the diff --git a/src/keyboard.c b/src/keyboard.c index e96d0167fd4..923ac1ad1d9 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -5283,9 +5283,9 @@ make_lispy_position (struct frame *f, Lisp_Object x, Lisp_Object y, 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 @@ make_lispy_position (struct frame *f, Lisp_Object x, Lisp_Object y, ? 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. */ -- 2.11.4.GIT