Commit aa36e4d2 authored by Eli Zaretskii's avatar Eli Zaretskii

Fix bug #12403 with garbled display under non-zero scroll-margin.

 src/xdisp.c (try_window_reusing_current_matrix): Under bidi
 reordering, locate the cursor by calling set_cursor_from_row; if
 that fails, clear the desired glyph matrix before returning a
 failure indication to the caller.  Fixes leaving garbled display
 when fast scrolling with a down-key when scroll-margin is non-zero.
parent e0453b55
2012-09-12 Eli Zaretskii <eliz@gnu.org>
* xdisp.c (try_window_reusing_current_matrix): Under bidi
reordering, locate the cursor by calling set_cursor_from_row; if
that fails, clear the desired glyph matrix before returning a
failure indication to the caller. Fixes leaving garbled display
when fast scrolling with a down-key. (Bug#12403)
2012-09-12 Jan Djärv <jan.h.d@swipnet.se>
* gtkutil.c (x_wm_set_size_hint): Use 1 col for base_width so it
......
......@@ -16593,28 +16593,33 @@ try_window_reusing_current_matrix (struct window *w)
}
if (row < bottom_row)
{
struct glyph *glyph = row->glyphs[TEXT_AREA] + w->cursor.hpos;
struct glyph *end = row->glyphs[TEXT_AREA] + row->used[TEXT_AREA];
/* Can't use this optimization with bidi-reordered glyph
rows, unless cursor is already at point. */
/* Can't simply scan the row for point with
bidi-reordered glyph rows. Let set_cursor_from_row
figure out where to put the cursor, and if it fails,
give up. */
if (!NILP (BVAR (XBUFFER (w->buffer), bidi_display_reordering)))
{
if (!(w->cursor.hpos >= 0
&& w->cursor.hpos < row->used[TEXT_AREA]
&& BUFFERP (glyph->object)
&& glyph->charpos == PT))
return 0;
if (!set_cursor_from_row (w, row, w->current_matrix,
0, 0, 0, 0))
{
clear_glyph_matrix (w->desired_matrix);
return 0;
}
}
else
for (; glyph < end
&& (!BUFFERP (glyph->object)
|| glyph->charpos < PT);
glyph++)
{
w->cursor.hpos++;
w->cursor.x += glyph->pixel_width;
}
{
struct glyph *glyph = row->glyphs[TEXT_AREA] + w->cursor.hpos;
struct glyph *end = row->glyphs[TEXT_AREA] + row->used[TEXT_AREA];
for (; glyph < end
&& (!BUFFERP (glyph->object)
|| glyph->charpos < PT);
glyph++)
{
w->cursor.hpos++;
w->cursor.x += glyph->pixel_width;
}
}
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment