mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-01 09:51:22 -08:00
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.
This commit is contained in:
parent
e0453b552e
commit
aa36e4d28b
2 changed files with 31 additions and 18 deletions
|
|
@ -1,3 +1,11 @@
|
|||
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
|
||||
|
|
|
|||
41
src/xdisp.c
41
src/xdisp.c
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue