summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGerd Moellmann <gerd@gnu.org>2000-05-29 12:06:54 +0000
committerGerd Moellmann <gerd@gnu.org>2000-05-29 12:06:54 +0000
commit84ec3b4b5c5cfecfbdcdb6338e23ca091cbe93e8 (patch)
tree62606059877b93194ad31f395524cb7d8a5dc80c /src
parent869a3a147f590e9be3ac208be6588098c1841822 (diff)
downloademacs-84ec3b4b5c5cfecfbdcdb6338e23ca091cbe93e8.tar.gz
(free_realized_faces): Block/unblock input.
(free_realized_multibyte_face): Ditto.
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog7
-rw-r--r--src/xfaces.c19
2 files changed, 25 insertions, 1 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index b001c4eec0b..cf1a81b1612 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,8 @@
+2000-05-29 Gerd Moellmann <gerd@gnu.org>
+
+ * xfaces.c (free_realized_faces): Block/unblock input.
+ (free_realized_multibyte_face): Ditto.
+
2000-05-29 Dave Love <fx@gnu.org>
* 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 <handa@etl.go.jp>
diff --git a/src/xfaces.c b/src/xfaces.c
index d63c8212f8c..f39a2936b6e 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;
}