From 4457cc825bdbe30f704c80edbae25d12e7e5bab2 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sun, 31 Aug 2014 18:46:47 +0300 Subject: [PATCH] Fix cursor drawing in hscrolled R2L screen lines. src/xdisp.c (get_glyph_string_clip_rects): Don't let the width of a clipping rectangle become negative (i.e. large positive, since it's an unsigned data type). This can happen in R2L hscrolled glyph rows, and caused us to draw the cursor glyph on the fringe. For the details, see http://lists.gnu.org/archive/html/emacs-devel/2014-08/msg00543.html. --- src/ChangeLog | 9 +++++++++ src/xdisp.c | 5 ++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index 8f2e01f8cf9..26ee524acda 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,12 @@ +2014-08-31 Eli Zaretskii + + * xdisp.c (get_glyph_string_clip_rects): Don't let the width of a + clipping rectangle become negative (i.e. large positive, since + it's an unsigned data type). This can happen in R2L hscrolled + glyph rows, and caused us to draw the cursor glyph on the fringe. + For the details, see + http://lists.gnu.org/archive/html/emacs-devel/2014-08/msg00543.html. + 2014-08-31 Ken Brown * gmalloc.c: Don't include . Declare system malloc and diff --git a/src/xdisp.c b/src/xdisp.c index 2b12dd8f557..4383c497d7a 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -2174,7 +2174,10 @@ get_glyph_string_clip_rects (struct glyph_string *s, NativeRectangle *rects, int if (s->x > r.x) { - r.width -= s->x - r.x; + if (r.width >= s->x - r.x) + r.width -= s->x - r.x; + else /* R2L hscrolled row with cursor outside text area */ + r.width = 0; r.x = s->x; } r.width = min (r.width, glyph->pixel_width); -- 2.39.5