diff options
| author | Jim Blandy <jimb@redhat.com> | 1993-01-22 02:45:16 +0000 |
|---|---|---|
| committer | Jim Blandy <jimb@redhat.com> | 1993-01-22 02:45:16 +0000 |
| commit | 8678b9ccf53e6e6e05af74b748e25e4dc55b84f2 (patch) | |
| tree | 67c41071d3ef5d78b59efe3be276639d7c69f1e8 | |
| parent | 0f6b9c324b62c759df945ad51d506c68fa0019d2 (diff) | |
| download | emacs-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.c | 12 |
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) |
