summaryrefslogtreecommitdiff
path: root/src/frame.h
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2015-09-26 09:50:58 +0300
committerEli Zaretskii <eliz@gnu.org>2015-09-26 09:50:58 +0300
commite573d08ef15f0431ad8289b4242c49826f20efb6 (patch)
tree323f37b911569c654747df2047f236ad5d316587 /src/frame.h
parent3fbc53b09c21d5657c62a4a295b5b70a6ea5d661 (diff)
downloademacs-e573d08ef15f0431ad8289b4242c49826f20efb6.tar.gz
Make face realization be more frame-specific
* src/frame.h (struct f): New flag face_change. * src/xfaces.c (Finternal_make_lisp_face) (Finternal_copy_lisp_face, Finternal_set_lisp_face_attribute) (update_face_from_frame_parameter): Set the face_change flag only for the frame whose faces are affected. * src/xdisp.c (init_iterator): If a frame's face_change flag is set, free faces only on that frame. (redisplay_internal): Disable "display optimization 1" if the frame's face_change flag is set. (redisplay_window): Don't allow skipping a window's redisplay if its frame's face_change flag is set. * src/frame.c (x_set_screen_gamma): Instead of calling Fclear_face_cache, call clear_face_cache and set windows_or_buffers_changed to a non-zero value. This avoids setting the global face_change flag that triggers face realization on all frames and thorough redisplay of all of them. * lisp/term/tty-colors.el (tty-register-default-colors): Don't clear face cache if the selected frame is a GUI frame.
Diffstat (limited to 'src/frame.h')
-rw-r--r--src/frame.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/frame.h b/src/frame.h
index 546bede213d..af0dadb3d99 100644
--- a/src/frame.h
+++ b/src/frame.h
@@ -335,6 +335,9 @@ struct frame
/* Set to true after this frame was made by `make-frame'. */
bool_bf after_make_frame : 1;
+ /* Non-zero if this frame's faces need to be recomputed. */
+ bool_bf face_change : 1;
+
/* Bitfield area ends here. */
/* Number of lines (rounded up) of tool bar. REMOVE THIS */