From 84ec3b4b5c5cfecfbdcdb6338e23ca091cbe93e8 Mon Sep 17 00:00:00 2001 From: Gerd Moellmann Date: Mon, 29 May 2000 12:06:54 +0000 Subject: [PATCH] (free_realized_faces): Block/unblock input. (free_realized_multibyte_face): Ditto. --- src/ChangeLog | 7 ++++++- src/xfaces.c | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index b001c4eec0..cf1a81b161 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2000-05-29 Gerd Moellmann + + * xfaces.c (free_realized_faces): Block/unblock input. + (free_realized_multibyte_face): Ditto. + 2000-05-29 Dave Love * textprop.c (Qkeymap): New variable. @@ -20,7 +25,7 @@ (get_local_map): Extra arg using it. (Qkeymap): Declare. - * lisp.h: (get_local_map: Don't declare here. + * lisp.h (get_local_map): Don't declare here. 2000-05-29 Kenichi Handa diff --git a/src/xfaces.c b/src/xfaces.c index d63c8212f8..f39a2936b6 100644 --- a/src/xfaces.c +++ b/src/xfaces.c @@ -4663,6 +4663,11 @@ free_realized_faces (c) int i, size; struct frame *f = c->f; + /* We must block input here because we can't process X events + safely while only some faces are freed, or when the frame's + current matrix still references freed faces. */ + BLOCK_INPUT; + for (i = 0; i < c->used; ++i) { free_realized_face (f, c->faces_by_id[i]); @@ -4682,6 +4687,8 @@ free_realized_faces (c) clear_current_matrices (f); ++windows_or_buffers_changed; } + + UNBLOCK_INPUT; } } @@ -4698,6 +4705,11 @@ free_realized_multibyte_face (f, fontset) struct face *face; int i; + /* We must block input here because we can't process X events safely + while only some faces are freed, or when the frame's current + matrix still references freed faces. */ + BLOCK_INPUT; + for (i = 0; i < cache->used; i++) { face = cache->faces_by_id[i]; @@ -4709,11 +4721,18 @@ free_realized_multibyte_face (f, fontset) free_realized_face (f, face); } } + + /* Must do a thorough redisplay the next time. Mark current + matrices as invalid because they will reference faces freed + above. This function is also called when a frame is destroyed. + In this case, the root window of F is nil. */ if (WINDOWP (f->root_window)) { clear_current_matrices (f); ++windows_or_buffers_changed; } + + UNBLOCK_INPUT; } -- 2.20.1