diff --git a/collects/macro-debugger/tool.rkt b/collects/macro-debugger/tool.rkt index f1703f7384..26d7cbdd5c 100644 --- a/collects/macro-debugger/tool.rkt +++ b/collects/macro-debugger/tool.rkt @@ -42,6 +42,7 @@ (define drscheme-macro-stepper-director% (class macro-stepper-director% (init-field filename) + (inherit-field stepper-frames) (define eventspace (current-eventspace)) (define stepper #f) @@ -71,6 +72,12 @@ (filename filename) (director this)))) + (define/public (shutdown) + (when (pref:close-on-reset-console?) + (for ([(frame flags) (in-hash stepper-frames)]) + (unless (memq 'no-obsolete flags) + (send frame show #f))))) + (super-new))) @@ -256,6 +263,7 @@ (super reset-console) (when current-stepper-director (send current-stepper-director add-obsoleted-warning) + (send current-stepper-director shutdown) (set! current-stepper-director #f)) ;; setting the eval handler at this point disables CM, diff --git a/collects/macro-debugger/view/frame.rkt b/collects/macro-debugger/view/frame.rkt index 180dad6d7a..2290b2befd 100644 --- a/collects/macro-debugger/view/frame.rkt +++ b/collects/macro-debugger/view/frame.rkt @@ -207,6 +207,9 @@ (menu-option/notify-box extras-menu "Refresh on resize" (get-field refresh-on-resize? config)) + (menu-option/notify-box extras-menu + "Close old stepper on Run" + (get-field close-on-reset-console? config)) (menu-option/notify-box extras-menu "Draw binding arrows" (get-field draw-arrows? config)) diff --git a/collects/macro-debugger/view/prefs.rkt b/collects/macro-debugger/view/prefs.rkt index baf5710bff..6c86723318 100644 --- a/collects/macro-debugger/view/prefs.rkt +++ b/collects/macro-debugger/view/prefs.rkt @@ -6,6 +6,7 @@ unstable/gui/notify unstable/gui/prefs) (provide pref:macro-step-limit + pref:close-on-reset-console? macro-stepper-config-base% macro-stepper-config/prefs% macro-stepper-config/prefs/readonly%) @@ -30,6 +31,7 @@ (preferences:set-default 'MacroStepper:MacroStepLimit 40000 (lambda (x) (or (eq? x #f) (exact-positive-integer? x)))) (preferences:set-default 'MacroStepper:RefreshOnResize? #t boolean?) +(preferences:set-default 'MacroStepper:CloseOnResetConsole? #t boolean?) (define pref:width (pref:get/set 'MacroStepper:Frame:Width)) (define pref:height (pref:get/set 'MacroStepper:Frame:Height)) @@ -50,6 +52,7 @@ (define pref:split-context? (pref:get/set 'MacroStepper:SplitContext?)) (define pref:macro-step-limit (pref:get/set 'MacroStepper:MacroStepLimit)) (define pref:refresh-on-resize? (pref:get/set 'MacroStepper:RefreshOnResize?)) +(define pref:close-on-reset-console? (pref:get/set 'MacroStepper:CloseOnResetConsole?)) (define macro-stepper-config-base% (class* prefs-base% (config<%>) @@ -75,7 +78,8 @@ (extra-navigation? pref:extra-navigation?) (debug-catch-errors? pref:debug-catch-errors?) (split-context? pref:split-context?) - (refresh-on-resize? pref:refresh-on-resize?)) + (refresh-on-resize? pref:refresh-on-resize?) + (close-on-reset-console? pref:close-on-reset-console?)) (super-new))) (define macro-stepper-config/prefs% diff --git a/collects/macro-debugger/view/view.rkt b/collects/macro-debugger/view/view.rkt index 5fec952e6f..4724c3cf87 100644 --- a/collects/macro-debugger/view/view.rkt +++ b/collects/macro-debugger/view/view.rkt @@ -13,7 +13,7 @@ (define macro-stepper-director% (class* object% (director<%>) - (define stepper-frames (make-hasheq)) + (field [stepper-frames (make-hasheq)]) ;; Flags is a subset(list) of '(no-obsolete no-new-traces)