Disallow selection of a deleted screen. Unfortunately this can happen
authorChris Hanson <org/chris-hanson/cph>
Sun, 1 Aug 1993 06:10:37 +0000 (06:10 +0000)
committerChris Hanson <org/chris-hanson/cph>
Sun, 1 Aug 1993 06:10:37 +0000 (06:10 +0000)
because MWM generates these two events in sequence when the "close"
window menu entry is selected:

1. WM_DELETE_WINDOW event on the given screen.

2. FocusIn event on the given screen.  Yuck!  Side effect of selecting
   the menu button on the screen.

v7/src/edwin/curren.scm

index 1831b01237ff6be456149725258dc158b627b0d2..a24b8799d44d96fdbb2ad13c8870cffe3bdbc768 100644 (file)
@@ -1,6 +1,6 @@
 ;;; -*-Scheme-*-
 ;;;
-;;;    $Id: curren.scm,v 1.107 1993/08/01 05:27:38 cph Exp $
+;;;    $Id: curren.scm,v 1.108 1993/08/01 06:10:37 cph Exp $
 ;;;
 ;;;    Copyright (c) 1986, 1989-93 Massachusetts Institute of Technology
 ;;;
 (define (select-screen screen)
   (without-interrupts
    (lambda ()
-     (let ((screen* (selected-screen)))
-       (if (not (eq? screen screen*))
-          (let ((message (current-message)))
-            (clear-current-message!)
-            (screen-exit! screen*)
-            (let ((window (screen-selected-window screen)))
-              (undo-leave-window! window)
-              (change-selected-buffer window (window-buffer window) true
-                (lambda ()
-                  (set-editor-selected-screen! current-editor screen))))
-            (set-current-message! message)
-            (screen-enter! screen)
-            (update-screen! screen false)))))))
+     (if (not (screen-deleted? screen))
+        (let ((screen* (selected-screen)))
+          (if (not (eq? screen screen*))
+              (let ((message (current-message)))
+                (clear-current-message!)
+                (screen-exit! screen*)
+                (let ((window (screen-selected-window screen)))
+                  (undo-leave-window! window)
+                  (change-selected-buffer window (window-buffer window) true
+                    (lambda ()
+                      (set-editor-selected-screen! current-editor screen))))
+                (set-current-message! message)
+                (screen-enter! screen)
+                (update-screen! screen false))))))))
 \f
 (define (update-screens! display-style)
   (let loop ((screens (screen-list)))