]> git.eshelyaron.com Git - emacs.git/commitdiff
(free_realized_faces): Block/unblock input.
authorGerd Moellmann <gerd@gnu.org>
Mon, 29 May 2000 12:06:54 +0000 (12:06 +0000)
committerGerd Moellmann <gerd@gnu.org>
Mon, 29 May 2000 12:06:54 +0000 (12:06 +0000)
(free_realized_multibyte_face): Ditto.

src/ChangeLog
src/xfaces.c

index b001c4eec0bda3a129acb4e351d8e85515a10bcc..cf1a81b1612bf8f037a483f3e6eb8144977211dd 100644 (file)
@@ -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>
 
index d63c8212f8c8abeba045e3c9c88f23ab223e40cd..f39a2936b6eba273c5c11238e63ac49edaa14b8c 100644 (file)
@@ -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;
 }