Subject: bug#26742: Display bug with composed strings

From: YAMAMOTO Mitsuharu <[email-masked]>
Date: Thu, 04 May 2017 14:39:16 +0900

>>>>> On Wed, 03 May 2017 18:53:32 +0200, Andreas Schwab <[email-masked]> said:

>> On the Mac port, the filled box cursor disappears if I move it on
>> the composite characters.  The patch below seems to work for this
>> bug.  Could you try if it also solves the problems you observe?

> That fixes the disappearing box cursor, but doesn't fix the ghost
> character.

Then could you try the patch below, together with the previous one?  I
downloaded some fonts (Ubuntu Mono, Latin Modern Math, and XITS Math)
and installed them, but I couldn't reproduce the problem on X11 for
macOS.

				     YAMAMOTO Mitsuharu
				[email-masked]

diff --git a/src/xdisp.c b/src/xdisp.c
index e3315c4..ed88f4c 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -24711,7 +24725,8 @@ compute_overhangs_and_x (struct glyph_string *s, int x, int backward_p)
 	{
 	  if (FRAME_RIF (s->f)->compute_glyph_string_overhangs)
 	    FRAME_RIF (s->f)->compute_glyph_string_overhangs (s);
-	  x -= s->width;
+	  if (!s->cmp || s->cmp_to == s->cmp->glyph_len)
+	    x -= s->width;
 	  s->x = x;
 	  s = s->prev;
 	}
@@ -24723,7 +24738,8 @@ compute_overhangs_and_x (struct glyph_string *s, int x, int backward_p)
 	  if (FRAME_RIF (s->f)->compute_glyph_string_overhangs)
 	    FRAME_RIF (s->f)->compute_glyph_string_overhangs (s);
 	  s->x = x;
-	  x += s->width;
+	  if (!s->cmp || s->cmp_from == 0)
+	    x += s->width;
 	  s = s->next;
 	}
     }