changeset 87984:5ca564f6a9e6

(pos_visible_p): Handle the case where charpos falls on invisible text covered with an ellipsis.
author Chong Yidong <cyd@stupidchicken.com>
date Sat, 26 Jan 2008 01:00:44 +0000
parents 1017bed4a1c2
children f7a641e1f03d
files src/xdisp.c
diffstat 1 files changed, 22 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/xdisp.c	Sat Jan 26 01:00:30 2008 +0000
+++ b/src/xdisp.c	Sat Jan 26 01:00:44 2008 +0000
@@ -1321,6 +1321,28 @@
 	  visible_p = 1;
       if (visible_p)
 	{
+	  Lisp_Object window, prop;
+
+	  XSETWINDOW (window, w);
+	  prop = Fget_char_property (make_number (it.position.charpos),
+				     Qinvisible, window);
+
+	  /* If charpos coincides with invisible text covered with an
+	     ellipsis, use the first glyph of the ellipsis to compute
+	     the pixel positions.  */
+	  if (TEXT_PROP_MEANS_INVISIBLE (prop) == 2)
+	    {
+	      struct glyph_row *row = it.glyph_row;
+	      struct glyph *glyph = row->glyphs[TEXT_AREA];
+	      struct glyph *end = glyph + row->used[TEXT_AREA];
+	      int x = row->x;
+
+	      for (; glyph < end && glyph->charpos < charpos; glyph++)
+		x += glyph->pixel_width;
+
+	      top_x = x;
+	    }
+
 	  *x = top_x;
 	  *y = max (top_y + max (0, it.max_ascent - it.ascent), window_top_y);
 	  *rtop = max (0, window_top_y - top_y);