diff --git a/scheme/xlib/window-type.scm b/scheme/xlib/window-type.scm index 1d7f39e..050df30 100644 --- a/scheme/xlib/window-type.scm +++ b/scheme/xlib/window-type.scm @@ -1,10 +1,11 @@ ;; the window-datatype ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define-record-type window :window - (really-make-window tag Xwindow display) + (really-make-window tag Xwindow display destroyed?) window? (tag window-tag window-set-tag!) (Xwindow real-window-Xwindow window-set-Xwindow!) + (destroyed? window-destroyed? window-set-destroyed?!) (display window-display window-set-display!)) (define (window-Xwindow window) @@ -22,7 +23,7 @@ (let ((maybe-window (window-list-find Xwindow))) (if maybe-window maybe-window - (let ((window (really-make-window #f Xwindow display))) + (let ((window (really-make-window #f Xwindow display #f))) (if finalize? (add-finalizer! window destroy-window) (add-finalizer! window window-list-delete!)) @@ -57,11 +58,10 @@ (define (destroy-window window) (let ((Xdisplay (display-Xdisplay (window-display window))) (Xwindow (window-Xwindow window))) - (if (integer? Xwindow) - (begin - (window-list-delete! window) - (%destroy-window Xdisplay Xwindow) - (window-set-Xwindow! window 'already-destroyed))))) + (window-list-delete! window) + (if (not (window-destroyed? window)) + (%destroy-window Xdisplay Xwindow)) + (window-set-destroyed?! window #t))) (import-lambda-definition %destroy-window (Xdisplay Xwindow) "scx_Destroy_Window")