]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix region extension when scroll bar is on the right
authorEli Zaretskii <eliz@gnu.org>
Thu, 5 Mar 2015 16:56:43 +0000 (18:56 +0200)
committerEli Zaretskii <eliz@gnu.org>
Thu, 5 Mar 2015 16:56:43 +0000 (18:56 +0200)
 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.

src/ChangeLog
src/keyboard.c

index cfef5c46d1a4cdab21f289b966f8ac17b02be5bd..ae827cb441671d924bc9ed69ec22d24c0f24fb72 100644 (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
index e1c5691324d767797742fb9746f2f6629f66e92e..bf65df1584c628bbb950e9b0a365abd4016f3c87 100644 (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;