Fix wrong overhang display for gstring compositions (Bug#12364).
authorYAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
Tue, 11 Sep 2012 03:32:41 +0000 (12:32 +0900)
committerYAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
Tue, 11 Sep 2012 03:32:41 +0000 (12:32 +0900)
* xdisp.c (right_overwritten, right_overwriting): Also handle gstring
composition cases (Bug#12364).

* xterm.c (x_draw_glyph_string): Avoid overwriting inverted left
overhang of succeeding glyphs overlapping box cursor.

* w32term.c (x_draw_glyph_string): Likewise.

src/ChangeLog
src/w32term.c
src/xdisp.c
src/xterm.c

index 0e5bbfd..362d0b7 100644 (file)
@@ -1,3 +1,13 @@
+2012-09-11  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+
+       * xdisp.c (right_overwritten, right_overwriting): Also handle gstring
+       composition cases (Bug#12364).
+
+       * xterm.c (x_draw_glyph_string): Avoid overwriting inverted left
+       overhang of succeeding glyphs overlapping box cursor.
+
+       * w32term.c (x_draw_glyph_string): Likewise.
+
 2012-09-11  Paul Eggert  <eggert@cs.ucla.edu>
 
        Simplify, document, and port floating-point (Bug#12381).
index 571db3c..28c1c59 100644 (file)
@@ -2591,6 +2591,7 @@ x_draw_glyph_string (struct glyph_string *s)
                 w32_set_clip_rectangle (next->hdc, NULL);
                next->hl = save;
                next->num_clips = 0;
+               next->clip_head = s->next;
              }
        }
     }
index a791376..1deda68 100644 (file)
@@ -23050,7 +23050,8 @@ right_overwritten (struct glyph_string *s)
     {
       int x = 0, i;
       struct glyph *glyphs = s->row->glyphs[s->area];
-      int first = (s->first_glyph - glyphs) + (s->cmp ? 1 : s->nchars);
+      int first = (s->first_glyph - glyphs
+                  + (s->first_glyph->type == COMPOSITE_GLYPH ? 1 : s->nchars));
       int end = s->row->used[s->area];
 
       for (i = first; i < end && s->right_overhang > x; ++i)
@@ -23073,7 +23074,8 @@ right_overwriting (struct glyph_string *s)
   int i, k, x;
   int end = s->row->used[s->area];
   struct glyph *glyphs = s->row->glyphs[s->area];
-  int first = (s->first_glyph - glyphs) + (s->cmp ? 1 : s->nchars);
+  int first = (s->first_glyph - glyphs
+              + (s->first_glyph->type == COMPOSITE_GLYPH ? 1 : s->nchars));
 
   k = -1;
   x = 0;
index f0f6702..e5a5932 100644 (file)
@@ -2975,6 +2975,7 @@ x_draw_glyph_string (struct glyph_string *s)
                XSetClipMask (next->display, next->gc, None);
                next->hl = save;
                next->num_clips = 0;
+               next->clip_head = s->next;
              }
        }
     }