Fix region extension when scroll bar is on the right

src/keyboard.c (make_lispy_position): When the click is on the
 right-side vertical scroll bar, pass the rightmost X coordinate to
 buffer_posn_from_coords, so that the returned text position
 reflects the closest point to the click.  Fixes region extension
 when mouse moves outside the Emacs frame that has scroll bars on
 the right.
This commit is contained in:
Eli Zaretskii 2015-03-05 18:56:43 +02:00
parent 61e06b6cb2
commit 1be3bd0ad8
2 changed files with 18 additions and 6 deletions

View file

@ -1,3 +1,12 @@
2015-03-05 Eli Zaretskii <eliz@gnu.org>
* keyboard.c (make_lispy_position): When the click is on the
right-side vertical scroll bar, pass the rightmost X coordinate to
buffer_posn_from_coords, so that the returned text position
reflects the closest point to the click. Fixes region extension
when mouse moves outside the Emacs frame that has scroll bars on
the right.
2015-03-04 Martin Rudalics <rudalics@gmx.at>
* frame.c (x_set_font): Try to keep frame height and width

View file

@ -5360,9 +5360,9 @@ make_lispy_position (struct frame *f, Lisp_Object x, Lisp_Object y,
dy = yret = wy;
}
/* For clicks in the text area, fringes, or margins, call
buffer_posn_from_coords to extract TEXTPOS, the buffer
position nearest to the click. */
/* For clicks in the text area, fringes, margins, or vertical
scroll bar, call buffer_posn_from_coords to extract TEXTPOS,
the buffer position nearest to the click. */
if (!textpos)
{
Lisp_Object string2, object2 = Qnil;
@ -5370,11 +5370,14 @@ make_lispy_position (struct frame *f, Lisp_Object x, Lisp_Object y,
int dx2, dy2;
int width2, height2;
/* The pixel X coordinate passed to buffer_posn_from_coords
is the X coordinate relative to the text area for
text-area and right-margin clicks, zero otherwise. */
is the X coordinate relative to the text area for clicks
in text-area, right-margin/fringe and right-side vertical
scroll bar, zero otherwise. */
int x2
= (part == ON_TEXT) ? xret
: (part == ON_RIGHT_FRINGE || part == ON_RIGHT_MARGIN)
: (part == ON_RIGHT_FRINGE || part == ON_RIGHT_MARGIN
|| (part == ON_VERTICAL_SCROLL_BAR
&& WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_RIGHT (w)))
? (XINT (x) - window_box_left (w, TEXT_AREA))
: 0;
int y2 = wy;