Discard changes to buffer->clip_changed incurred during fontification.

* src/xdisp.c (handle_fontified_prop): Discard changes to clip_changed
incurred during fontification.
This commit is contained in:
Chong Yidong 2011-03-25 16:00:25 -04:00
parent 9ee0d17461
commit 2ecf6fdb28
2 changed files with 25 additions and 0 deletions

View file

@ -1,3 +1,8 @@
2011-03-25 Chong Yidong <cyd@stupidchicken.com>
* xdisp.c (handle_fontified_prop): Discard changes to clip_changed
incurred during fontification.
2011-03-25 Juanma Barranquero <lekktu@gmail.com>
* buffer.c (defvar_per_buffer): Remove unused parameter `doc'.

View file

@ -3164,6 +3164,9 @@ handle_fontified_prop (struct it *it)
{
int count = SPECPDL_INDEX ();
Lisp_Object val;
struct buffer *obuf = current_buffer;
int begv = BEGV, zv = ZV;
int old_clip_changed = current_buffer->clip_changed;
val = Vfontification_functions;
specbind (Qfontification_functions, Qnil);
@ -3209,6 +3212,23 @@ handle_fontified_prop (struct it *it)
unbind_to (count, Qnil);
/* Fontification functions routinely call `save-restriction'.
Normally, this tags clip_changed, which can confuse redisplay
(see discussion in Bug#6671). Since we don't perform any
special handling of fontification changes in the case where
`save-restriction' isn't called, there's no point doing so in
this case either. So, if the buffer's restrictions are
actually left unchanged, reset clip_changed. */
if (obuf == current_buffer)
{
if (begv == BEGV && zv == ZV)
current_buffer->clip_changed = old_clip_changed;
}
/* There isn't much we can reasonably do to protect against
misbehaving fontification, but here's a fig leaf. */
else if (!NILP (BVAR (obuf, name)))
set_buffer_internal_1 (obuf);
/* The fontification code may have added/removed text.
It could do even a lot worse, but let's at least protect against
the most obvious case where only the text past `pos' gets changed',