# HG changeset patch # User Gerd Moellmann # Date 953555097 0 # Node ID fd3ece8a61e55a0560d2336a2b5c2d0568c47ca6 # Parent 07ac059dece070f50c4488f013ce2c36d0b4ed23 (Fset_buffer_modified_p): Set update_mode_lines only if buffer is displayed in some window. diff -r 07ac059dece0 -r fd3ece8a61e5 src/buffer.c --- a/src/buffer.c Mon Mar 20 12:24:13 2000 +0000 +++ b/src/buffer.c Mon Mar 20 12:24:57 2000 +0000 @@ -806,6 +806,7 @@ { register int already; register Lisp_Object fn; + Lisp_Object buffer, window; #ifdef CLASH_DETECTION /* If buffer becoming modified, lock the file. @@ -824,7 +825,23 @@ #endif /* CLASH_DETECTION */ SAVE_MODIFF = NILP (flag) ? MODIFF : 0; - update_mode_lines++; + + /* Set update_mode_lines only if buffer is displayed in some window. + Packages like jit-lock or lazy-lock preserve a buffer's modified + state by recording/restoring the state around blocks of code. + Setting update_mode_lines makes redisplay consider all windows + (on all frames). Stealth fontification of buffers not displayed + would incur additional redisplay costs if we'd set + update_modes_lines unconditionally. + + Ideally, I think there should be another mechanism for fontifying + buffers without "modifying" buffers, or redisplay should be + smarter about updating the `*' in mode lines. --gerd */ + XSETBUFFER (buffer, current_buffer); + window = Fget_buffer_window (buffer, Qt); + if (WINDOWP (window)) + update_mode_lines++; + return flag; }