diff --git a/collects/framework/private/frame.ss b/collects/framework/private/frame.ss index c5344b49..0c1c7f81 100644 --- a/collects/framework/private/frame.ss +++ b/collects/framework/private/frame.ss @@ -882,6 +882,13 @@ (string-constant open-here-menu-item) (string-constant open-menu-item)))) + (rename [super-on-close on-close]) + (define/override (on-close) + (super-on-close) + (let ([group (group:get-the-frame-group)]) + (when (eq? this (send group get-open-here-frame)) + (send group set-open-here-frame #f)))) + (rename [super-on-activate on-activate]) (define/override (on-activate on?) (super-on-activate on?) diff --git a/collects/framework/private/group.ss b/collects/framework/private/group.ss index f2001f58..ba42a440 100644 --- a/collects/framework/private/group.ss +++ b/collects/framework/private/group.ss @@ -119,9 +119,18 @@ (set-close-menu-item-state! a-frame #t)) frames))))] - (field (open-here-frame #f)) + (field [open-here-frame #f]) (define/public (set-open-here-frame fr) (set! open-here-frame fr)) - (define/public (get-open-here-frame) open-here-frame) + (define/public (get-open-here-frame) + (cond + [open-here-frame open-here-frame] + [else + (let ([candidates + (filter (lambda (x) (is-a? (frame-frame x) frame:open-here<%>)) + frames)]) + (if (null? candidates) + #f + (frame-frame (car candidates))))])) (public get-mdi-parent set-empty-callbacks frame-label-changed for-each-frame get-active-frame set-active-frame insert-frame can-remove-frame?