summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Blandy <jimb@redhat.com>1993-01-22 02:45:16 +0000
committerJim Blandy <jimb@redhat.com>1993-01-22 02:45:16 +0000
commit8678b9ccf53e6e6e05af74b748e25e4dc55b84f2 (patch)
tree67c41071d3ef5d78b59efe3be276639d7c69f1e8
parent0f6b9c324b62c759df945ad51d506c68fa0019d2 (diff)
downloademacs-8678b9ccf53e6e6e05af74b748e25e4dc55b84f2.tar.gz
* frame.c (Fdelete_frame): Clear the frame's display after calling
the window-system-dependent frame destruction routine. We no longer need to pass the display as a separate argument to x_destroy_window. * xterm.c (x_destroy_window): Put the code which clears out f's display here, right after we free the storage it points to. Put everything, including the code which clears x_focus_frame and x_highlight_frame, inside the BLOCK/UNBLOCK_INPUT pair. * frame.c (Fdelete_frame): Clear the frame's display after calling the window-system-dependent frame destruction routine. We no longer need to pass the display as a separate argument to x_destroy_window. * xterm.c (x_destroy_window): Put the code which clears out f's display here, right after we free the storage it points to. Put everything, including the code which clears x_focus_frame and x_highlight_frame, inside the BLOCK/UNBLOCK_INPUT pair.
-rw-r--r--src/frame.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/frame.c b/src/frame.c
index e393e597e0a..7184c20b797 100644
--- a/src/frame.c
+++ b/src/frame.c
@@ -593,7 +593,6 @@ A frame may not be deleted if its minibuffer is used by other frames.")
Lisp_Object frame;
{
struct frame *f;
- union display displ;
if (EQ (frame, Qnil))
{
@@ -654,14 +653,19 @@ A frame may not be deleted if its minibuffer is used by other frames.")
Vframe_list = Fdelq (frame, Vframe_list);
FRAME_SET_VISIBLE (f, 0);
- displ = f->display;
- f->display.nothing = 0;
+ /* Since some events are handled at the interrupt level, we may get
+ an event for f at any time; if we zero out the frame's display
+ now, then we may trip up the event-handling code. Instead, we'll
+ promise that the display of the frame must be valid until we have
+ called the window-system-dependent frame destruction routine. */
#ifdef HAVE_X_WINDOWS
if (FRAME_X_P (f))
- x_destroy_window (f, displ);
+ x_destroy_window (f);
#endif
+ f->display.nothing = 0;
+
/* If we've deleted the last_nonminibuf_frame, then try to find
another one. */
if (f == last_nonminibuf_frame)