summaryrefslogtreecommitdiff
path: root/src/keyboard.c
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2016-10-29 17:39:54 +0300
committerEli Zaretskii <eliz@gnu.org>2016-10-29 17:39:54 +0300
commit966b73b3163416adf09bcff7418ecc9fa5a554c9 (patch)
treefb8d4c66b2e0f4627e4b4b4be33b0be0d5b2edb6 /src/keyboard.c
parentaaa3a93e500ca189be1e8433ca2630ce2c86aa06 (diff)
downloademacs-966b73b3163416adf09bcff7418ecc9fa5a554c9.tar.gz
Avoid errors in posn-at-point for large images
* src/keyboard.c (Fposn_at_point): If pos-visible-in-window-p returns a 6-member list for a partially visible glyph, pass the sum of Y and RTOP to posn-at-x-y, since that's where the visible portion of that glyph begins on display. (Bug#24804) (Bug#21832) (Bug#23809)
Diffstat (limited to 'src/keyboard.c')
-rw-r--r--src/keyboard.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/keyboard.c b/src/keyboard.c
index bb411e77823..65938a5eb56 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -10790,11 +10790,19 @@ The `posn-' functions access elements of such lists. */)
{
Lisp_Object x = XCAR (tem);
Lisp_Object y = XCAR (XCDR (tem));
+ Lisp_Object aux_info = XCDR (XCDR (tem));
+ int y_coord = XINT (y);
/* Point invisible due to hscrolling? X can be -1 when a
newline in a R2L line overflows into the left fringe. */
if (XINT (x) < -1)
return Qnil;
+ if (!NILP (aux_info) && y_coord < 0)
+ {
+ int rtop = XINT (XCAR (aux_info));
+
+ y = make_number (y_coord + rtop);
+ }
tem = Fposn_at_x_y (x, y, window, Qnil);
}