diff --git a/drracket-core-lib/browser/external.rkt b/drracket-core-lib/browser/external.rkt index 2fba81299..ed9956064 100644 --- a/drracket-core-lib/browser/external.rkt +++ b/drracket-core-lib/browser/external.rkt @@ -40,10 +40,11 @@ ;; sync-current-proxy-servers : proxy-pref -> void ;; syncs current-proxy-servers parameter with the proxy-pref-val (define (sync-current-proxy-servers pref-val) - (let* ([ops (current-proxy-servers)] - [removed (remove-all-proxies "http" ops)]) - (current-proxy-servers - (if pref-val (cons pref-val removed) removed)))) + (define ops (current-proxy-servers)) + (define removed (remove-all-proxies "http" ops)) + (current-proxy-servers (if pref-val + (cons pref-val removed) + removed))) (define (remove-all-proxies scheme proxies) (filter (lambda (x) (and (pair? x) (not (equal? (car x) scheme)))) @@ -84,9 +85,8 @@ (loop (add1 tries))))))) (define unix-browser-names - (map (lambda (s) - (string-titlecase (regexp-replace* #rx"-" (symbol->string s) " "))) - raw:unix-browser-list)) + (for/list ([s (in-list raw:unix-browser-list)]) + (string-titlecase (regexp-replace* #rx"-" (symbol->string s) " ")))) ;; : (U str #f) -> (U symbol #f) ;; to prompt the user for a browser preference @@ -94,38 +94,37 @@ ;; and in that case, the user can choose to use the internal ;; broswer. (define (choose-browser url) - (let* ([title (string-constant choose-browser)] - [d (make-object dialog% title)] - [main-pane (make-object vertical-pane% d)] - [internal-ok? (not url)] - [ok? #f] - [orig-external (fw:preferences:get 'external-browser)]) - (make-object message% title main-pane) - ;; No need to show the URL (it can be very long) - ;; (when url - ;; (make-object message% (format "URL: ~a" url) main-pane)) - (let-values ([(panel callbacks) (make-help-browser-preference-panel internal-ok? #f (lambda (f) (f main-pane)))]) - (let*-values ([(button-pane) (instantiate horizontal-panel% (main-pane) - (alignment '(right center)))] - [(ok-button cancel-button) - (fw:gui-utils:ok/cancel-buttons - button-pane - (lambda (b e) (set! ok? #t) (send d show #f)) - (lambda (b e) - (fw:preferences:set 'external-browser orig-external) - (send d show #f)))] - [(enable-button) (lambda (_n _v) - (queue-callback - (lambda () - (send ok-button enable (fw:preferences:get 'external-browser)))))]) - (send ok-button enable #f) - (set! callbacks - (cons - (fw:preferences:add-callback 'external-browser enable-button) - callbacks))) - (send d show #t) - (map (lambda (f) (f)) callbacks) - ok?))) + (define title (string-constant choose-browser)) + (define d (make-object dialog% title)) + (define main-pane (make-object vertical-pane% d)) + (define internal-ok? (not url)) + (define ok? #f) + (define orig-external (fw:preferences:get 'external-browser)) + (make-object message% title main-pane) + ;; No need to show the URL (it can be very long) + ;; (when url + ;; (make-object message% (format "URL: ~a" url) main-pane)) + (define-values (panel callbacks) + (make-help-browser-preference-panel internal-ok? #f (lambda (f) (f main-pane)))) + (let*-values ([(button-pane) (instantiate horizontal-panel% (main-pane) + [alignment '(right center)])] + [(ok-button cancel-button) (fw:gui-utils:ok/cancel-buttons + button-pane + (lambda (b e) + (set! ok? #t) + (send d show #f)) + (lambda (b e) + (fw:preferences:set 'external-browser orig-external) + (send d show #f)))] + [(enable-button) + (lambda (_n _v) + (queue-callback + (lambda () (send ok-button enable (fw:preferences:get 'external-browser)))))]) + (send ok-button enable #f) + (set! callbacks (cons (fw:preferences:add-callback 'external-browser enable-button) callbacks))) + (send d show #t) + (map (lambda (f) (f)) callbacks) + ok?) (define panel-installed? #f) (define prefs-panel #f) @@ -140,11 +139,11 @@ (lambda (f) (fw:preferences:add-panel (string-constant browser) (lambda (parent) - (let-values ([(panel cbs) (f parent)]) - (set! prefs-panel panel) - (map (lambda (f) (f panel)) additions) - (set! additions null) - panel))))))) + (define-values (panel cbs) (f parent)) + (set! prefs-panel panel) + (map (lambda (f) (f panel)) additions) + (set! additions null) + panel)))))) (define (add-to-browser-prefs-panel proc) (if prefs-panel @@ -155,150 +154,153 @@ (mk (lambda (parent) (define callbacks null) - (let ([pref-panel (instantiate vertical-panel% () - [parent parent] - [alignment '(left center)])]) - - ;; -------------------- external browser for Unix -------------------- - (when (unix-browser?) - (unless synchronized? - ;; Keep 'external-browser in sync - (fw:preferences:add-callback 'external-browser - (lambda (name browser) - (try-put-preferences (list 'external-browser) (list browser))))) - - (letrec ([v-panel (instantiate group-box-panel% () - (parent pref-panel) - (alignment '(right center)) - (stretchable-height #f) - (label (string-constant external-browser-choice-title)))] - [h-panel (instantiate horizontal-panel% () - (parent v-panel) - (alignment '(center bottom)))] - [none-index (length raw:unix-browser-list)] - [custom-index (add1 none-index)] - [r (instantiate radio-box% () - (label #f) - (choices (append unix-browser-names - (list (string-constant no-browser) - (string-constant browser-command-line-label)))) - (parent h-panel) - (callback - (lambda (radio event) - (let ([n (send radio get-selection)]) - (set-browser! - (cond - [(= n none-index) #f] - [(= n custom-index) (get-custom)] - [else (list-ref raw:unix-browser-list n)]))))))] - [select-custom - (lambda (_ __) - (send r set-selection custom-index) - (set-browser! (get-custom)))] - [get-custom - (lambda () (cons (send pre get-value) (send post get-value)))] - [template-panel (instantiate horizontal-panel% (h-panel) - (spacing 0) - (stretchable-height #f))] - [pre (instantiate text-field% () - (label #f) (parent template-panel) (callback select-custom) - (horiz-margin 0))] - [mess (instantiate message% () (label "") (parent template-panel) - (horiz-margin 0))] - [post (instantiate text-field% () - (label #f) (parent template-panel) (callback select-custom) - (horiz-margin 0))] - [note1 (instantiate message% ((string-constant browser-cmdline-expl-line-1) - v-panel))] - [note2 (instantiate message% ((string-constant browser-cmdline-expl-line-2) - v-panel))] - [refresh-controls (lambda (pref) - (if (pair? pref) - (begin - (send r set-selection custom-index) - (send pre set-value (car pref)) - (send post set-value (cdr pref))) - (let init ([x raw:unix-browser-list] [n 0]) - (cond - [(null? x) (send r set-selection n)] - [else (if (eq? pref (car x)) - (send r set-selection n) - (init (cdr x) (add1 n)))]))))]) - - (unless ask-later? - (send r enable none-index #f)) - - (refresh-controls (fw:preferences:get 'external-browser)) - (set! callbacks - (cons (fw:preferences:add-callback 'external-browser - (lambda (name browser) (refresh-controls browser))) - callbacks)))) - - ;; -------------------- proxy for doc downloads -------------------- - (when set-help? - (letrec ([p (instantiate group-box-panel% () - [label (string-constant http-proxy)] - [parent pref-panel] - [stretchable-height #f] - [alignment '(left top)])] - [rb (make-object radio-box% - #f (list (string-constant proxy-direct-connection) - (string-constant proxy-use-proxy)) - p - (lambda (r e) - (let ([proxy? (= 1 (send r get-selection))]) - (send proxy-spec enable proxy?) - (if proxy? - (update-proxy) - (fw:preferences:set http-proxy-preference #f)))))] - [proxy-spec (instantiate horizontal-panel% (p) - [stretchable-width #f] - [stretchable-height #f] - [alignment '(left center)])] - [update-proxy (lambda () - (let ([host (send host get-value)] - [port (send port get-value)]) - (let ([ok? (and (regexp-match? #rx"^[-0-9a-zA-Z.]+$" host) - (regexp-match? #rx"^[0-9]+$" port) - (string->number port) - (<= 1 (string->number port) 65535))]) - (when ok? - (fw:preferences:set - http-proxy-preference - (list "http" host (string->number port)))) - (send bad-host show (not ok?)))))] - [host (make-object text-field% - (string-constant proxy-host) - proxy-spec (lambda (x y) (update-proxy)) - "www.someplacethatisaproxy.domain.com")] - [port (make-object text-field% - (string-constant proxy-port) - proxy-spec (lambda (x y) (update-proxy)) "65535")] - [bad-host (make-object message% - (string-constant proxy-bad-host) - p)] - [update-gui - (lambda (proxy-val) - (send bad-host show #f) - (if proxy-val - (begin - (send rb set-selection 1) - (send proxy-spec enable #t) - (unless (string=? (cadr proxy-val) (send host get-value)) - (send host set-value (cadr proxy-val))) - (unless (equal? (caddr proxy-val) (string->number (send port get-value))) - (send port set-value (number->string (caddr proxy-val))))) - (begin - (send rb set-selection 0) - (send proxy-spec enable #f) - (send host set-value "") - (send port set-value ""))))]) - - (fw:preferences:add-callback http-proxy-preference - (lambda (name val) - (update-gui val))) - (update-gui (fw:preferences:get http-proxy-preference)) - (send bad-host show #f))) - - (set! synchronized? #t) - (values pref-panel callbacks))))) + (define pref-panel + (new vertical-panel% [parent parent] [alignment '(left center)])) + + ;; -------------------- external browser for Unix -------------------- + (when (unix-browser?) + (unless synchronized? + ;; Keep 'external-browser in sync + (fw:preferences:add-callback + 'external-browser + (lambda (name browser) (try-put-preferences (list 'external-browser) (list browser))))) + + (letrec + ([v-panel (new group-box-panel% + [parent pref-panel] + [alignment '(right center)] + [stretchable-height #f] + [label (string-constant external-browser-choice-title)])] + [h-panel (new horizontal-panel% [parent v-panel] [alignment '(center bottom)])] + [none-index (length raw:unix-browser-list)] + [custom-index (add1 none-index)] + [r (new radio-box% + [label #f] + [choices + (append unix-browser-names + (list (string-constant no-browser) + (string-constant browser-command-line-label)))] + [parent h-panel] + [callback + (lambda (radio event) + (let ([n (send radio get-selection)]) + (set-browser! (cond + [(= n none-index) #f] + [(= n custom-index) (get-custom)] + [else (list-ref raw:unix-browser-list n)]))))])] + [select-custom (lambda (_ __) + (send r set-selection custom-index) + (set-browser! (get-custom)))] + [get-custom (lambda () (cons (send pre get-value) (send post get-value)))] + [template-panel (instantiate horizontal-panel% (h-panel) + [spacing 0] + [stretchable-height #f])] + [pre (instantiate text-field% () + [label #f] + [parent template-panel] + [callback select-custom] + [horiz-margin 0])] + [mess (instantiate message% () + [label ""] + [parent template-panel] + [horiz-margin 0])] + [post (instantiate text-field% () + [label #f] + [parent template-panel] + [callback select-custom] + [horiz-margin 0])] + [note1 (instantiate message% ((string-constant browser-cmdline-expl-line-1) v-panel))] + [note2 (instantiate message% ((string-constant browser-cmdline-expl-line-2) v-panel))] + [refresh-controls (lambda (pref) + (if (pair? pref) + (begin + (send r set-selection custom-index) + (send pre set-value (car pref)) + (send post set-value (cdr pref))) + (let init ([x raw:unix-browser-list] + [n 0]) + (cond + [(null? x) (send r set-selection n)] + [else + (if (eq? pref (car x)) + (send r set-selection n) + (init (cdr x) + (add1 n)))]))))]) + + (unless ask-later? + (send r enable none-index #f)) + + (refresh-controls (fw:preferences:get 'external-browser)) + (set! callbacks + (cons (fw:preferences:add-callback 'external-browser + (lambda (name browser) + (refresh-controls browser))) + callbacks)))) + + ;; -------------------- proxy for doc downloads -------------------- + (when set-help? + (letrec ([p (instantiate group-box-panel% () + [label (string-constant http-proxy)] + [parent pref-panel] + [stretchable-height #f] + [alignment '(left top)])] + [rb (make-object radio-box% + #f + (list (string-constant proxy-direct-connection) + (string-constant proxy-use-proxy)) + p + (lambda (r e) + (let ([proxy? (= 1 (send r get-selection))]) + (send proxy-spec enable proxy?) + (if proxy? + (update-proxy) + (fw:preferences:set http-proxy-preference #f)))))] + [proxy-spec (instantiate horizontal-panel% (p) + [stretchable-width #f] + [stretchable-height #f] + [alignment '(left center)])] + [update-proxy (lambda () + (let ([host (send host get-value)] + [port (send port get-value)]) + (let ([ok? (and (regexp-match? #rx"^[-0-9a-zA-Z.]+$" host) + (regexp-match? #rx"^[0-9]+$" port) + (string->number port) + (<= 1 (string->number port) 65535))]) + (when ok? + (fw:preferences:set http-proxy-preference + (list "http" host (string->number port)))) + (send bad-host show (not ok?)))))] + [host (make-object text-field% + (string-constant proxy-host) + proxy-spec + (lambda (x y) (update-proxy)) + "www.someplacethatisaproxy.domain.com")] + [port (make-object text-field% + (string-constant proxy-port) + proxy-spec + (lambda (x y) (update-proxy)) + "65535")] + [bad-host (make-object message% (string-constant proxy-bad-host) p)] + [update-gui (lambda (proxy-val) + (send bad-host show #f) + (if proxy-val + (begin + (send rb set-selection 1) + (send proxy-spec enable #t) + (unless (string=? (cadr proxy-val) (send host get-value)) + (send host set-value (cadr proxy-val))) + (unless (equal? (caddr proxy-val) + (string->number (send port get-value))) + (send port set-value (number->string (caddr proxy-val))))) + (begin + (send rb set-selection 0) + (send proxy-spec enable #f) + (send host set-value "") + (send port set-value ""))))]) + + (fw:preferences:add-callback http-proxy-preference (lambda (name val) (update-gui val))) + (update-gui (fw:preferences:get http-proxy-preference)) + (send bad-host show #f))) + + (set! synchronized? #t) + (values pref-panel callbacks)))) diff --git a/drracket-test/tests/drracket/private/drracket-test-util.rkt b/drracket-test/tests/drracket/private/drracket-test-util.rkt index 507729b50..77164c427 100644 --- a/drracket-test/tests/drracket/private/drracket-test-util.rkt +++ b/drracket-test/tests/drracket/private/drracket-test-util.rkt @@ -11,9 +11,8 @@ "gui.rkt" "no-fw-test-util.rkt") - (provide/contract - [use-get/put-dialog (-> (-> any) path? void?)] - [set-module-language! (->* () (boolean?) void?)]) + (provide (contract-out [use-get/put-dialog (-> (-> any) path? void?)] + [set-module-language! (->* () (boolean?) void?)])) (provide queue-callback/res fire-up-drracket-and-run-tests @@ -60,25 +59,25 @@ ;; filename is a string naming a file that should be typed into the dialog (define (use-get/put-dialog open-dialog filename) (not-on-eventspace-handler-thread 'use-get/put-dialog) - (let ([drs (wait-for-drracket-frame)]) - (with-handlers ([(lambda (x) #t) - (lambda (x) - (fw:preferences:set 'framework:file-dialogs 'std) - (raise x))]) - (fw:preferences:set 'framework:file-dialogs 'common) - (open-dialog) - (let ([dlg (wait-for-new-frame drs)]) - (send (find-labelled-window "Filename:" #f (fw:test:get-active-top-level-window)) focus) - (fw:test:keystroke #\a (list (case (system-type) - [(windows) 'control] - [(macosx macos) 'meta] - [(unix) 'control] - [else (error 'use-get/put-dialog "unknown platform: ~s\n" - (system-type))]))) - (for-each fw:test:keystroke (string->list (path->string filename))) - (fw:test:button-push "OK") - (wait-for-new-frame dlg)) - (fw:preferences:set 'framework:file-dialogs 'std)))) + (define drs (wait-for-drracket-frame)) + (with-handlers ([(lambda (x) #t) (lambda (x) + (fw:preferences:set 'framework:file-dialogs 'std) + (raise x))]) + (fw:preferences:set 'framework:file-dialogs 'common) + (open-dialog) + (let ([dlg (wait-for-new-frame drs)]) + (send (find-labelled-window "Filename:" #f (fw:test:get-active-top-level-window)) focus) + (fw:test:keystroke + #\a + (list (case (system-type) + [(windows) 'control] + [(macosx macos) 'meta] + [(unix) 'control] + [else (error 'use-get/put-dialog "unknown platform: ~s\n" (system-type))]))) + (for-each fw:test:keystroke (string->list (path->string filename))) + (fw:test:button-push "OK") + (wait-for-new-frame dlg)) + (fw:preferences:set 'framework:file-dialogs 'std))) (define (test-util-error fmt . args) (raise (make-exn (apply fmt args) (current-continuation-marks)))) @@ -90,10 +89,7 @@ (define (wait-for-drracket-frame [print-message? #f]) (define (wait-for-drracket-frame-pred) (define active (fw:test:get-active-top-level-window)) - (if (and active - (drracket-frame? active)) - active - #f)) + (and (and active (drracket-frame? active)) active)) (define drr-fr (or (wait-for-drracket-frame-pred) (begin @@ -116,10 +112,7 @@ (for/or ([eventspace (in-list extra-eventspaces)]) (parameterize ([current-eventspace eventspace]) (fw:test:get-active-top-level-window))))) - (if (and active - (not (eq? active old-frame))) - active - #f)) + (and (and active (not (eq? active old-frame))) active)) (define lab (send old-frame get-label)) (define fr (poll-until (procedure-rename wait-for-new-frame-pred @@ -167,34 +160,29 @@ (poll-until wait-for-computation-to-finish 60) (sync (system-idle-evt))) - (define do-execute - (case-lambda - [(frame) - (do-execute frame #t)] - [(frame wait-for-finish?) - (not-on-eventspace-handler-thread 'do-execute) - (queue-callback/res (λ () (verify-drracket-frame-frontmost 'do-execute frame))) - (let ([button (queue-callback/res (λ () (send frame get-execute-button)))]) - (fw:test:run-one (lambda () (send button command))) - (when wait-for-finish? - (wait-for-computation frame)))])) + (define (do-execute frame [wait-for-finish? #t]) + (not-on-eventspace-handler-thread 'do-execute) + (queue-callback/res (λ () (verify-drracket-frame-frontmost 'do-execute frame))) + (let ([button (queue-callback/res (λ () (send frame get-execute-button)))]) + (fw:test:run-one (lambda () (send button command))) + (when wait-for-finish? + (wait-for-computation frame)))) (define (verify-drracket-frame-frontmost function-name frame) (on-eventspace-handler-thread 'verify-drracket-frame-frontmost) - (let ([tl (fw:test:get-active-top-level-window)]) - (unless (and (eq? frame tl) - (drracket-frame? tl)) - (error function-name "drracket frame not frontmost: ~e (found ~e)" frame tl)))) + (define tl (fw:test:get-active-top-level-window)) + (unless (and (eq? frame tl) (drracket-frame? tl)) + (error function-name "drracket frame not frontmost: ~e (found ~e)" frame tl))) (define (clear-definitions frame) (queue-callback/res (λ () (verify-drracket-frame-frontmost 'clear-definitions frame))) (fw:test:new-window (queue-callback/res (λ () (send frame get-definitions-canvas)))) (let ([window (queue-callback/res (λ () (send frame get-edit-target-window)))]) - (let-values ([(cw ch) (queue-callback/res (λ () (send window get-client-size)))] - [(w h) (queue-callback/res (λ () (send window get-size)))]) - (fw:test:mouse-click 'left - (inexact->exact (floor (+ cw (/ (- w cw) 2)))) - (inexact->exact (floor (+ ch (/ (- h ch) 2))))))) + (define-values (cw ch) (queue-callback/res (λ () (send window get-client-size)))) + (define-values (w h) (queue-callback/res (λ () (send window get-size)))) + (fw:test:mouse-click 'left + (inexact->exact (floor (+ cw (/ (- w cw) 2)))) + (inexact->exact (floor (+ ch (/ (- h ch) 2)))))) (fw:test:menu-select "Edit" "Select All") (fw:test:menu-select "Edit" (if (eq? (system-type) 'macos) "Clear" @@ -217,29 +205,29 @@ (not-on-eventspace-handler-thread 'put-in-frame) (unless (and (object? frame) (is-a? frame top-level-window<%>)) (error who "expected a frame or a dialog as the first argument, got ~e" frame)) - (let ([str (if (string? str/sexp) - str/sexp - (let ([port (open-output-string)]) - (parameterize ([current-output-port port]) - (write str/sexp port)) - (get-output-string port)))]) - (queue-callback/res (λ () (verify-drracket-frame-frontmost who frame))) - (let ([canvas (queue-callback/res (λ () (get-canvas frame)))]) - (fw:test:new-window canvas) - (let ([editor (queue-callback/res (λ () (send canvas get-editor)))]) - (cond - [just-insert? - (let ([s (make-semaphore 0)]) - (queue-callback - (λ () - (send editor set-caret-owner #f) - (send editor insert str) - (semaphore-post s))) - (unless (sync/timeout 3 s) - (error who "callback didn't run for 3 seconds; trying to insert ~s" str/sexp)))] - [else - (queue-callback/res (λ () (send editor set-caret-owner #f))) - (type-string str)]))))) + (define str + (if (string? str/sexp) + str/sexp + (let ([port (open-output-string)]) + (parameterize ([current-output-port port]) + (write str/sexp port)) + (get-output-string port)))) + (queue-callback/res (λ () (verify-drracket-frame-frontmost who frame))) + (define canvas (queue-callback/res (λ () (get-canvas frame)))) + (fw:test:new-window canvas) + (define editor (queue-callback/res (λ () (send canvas get-editor)))) + (cond + [just-insert? + (let ([s (make-semaphore 0)]) + (queue-callback (λ () + (send editor set-caret-owner #f) + (send editor insert str) + (semaphore-post s))) + (unless (sync/timeout 3 s) + (error who "callback didn't run for 3 seconds; trying to insert ~s" str/sexp)))] + [else + (queue-callback/res (λ () (send editor set-caret-owner #f))) + (type-string str)])) (define (alt-return-in-interactions frame) (not-on-eventspace-handler-thread 'alt-return-in-interactions) @@ -450,7 +438,7 @@ new-frame drs-frame))))))) - (provide/contract [check-language-level ((or/c string? regexp?) . -> . void?)]) + (provide (contract-out [check-language-level ((or/c string? regexp?) . -> . void?)])) ;; checks that the language in the drracket window is set to the given one. ;; clears the definitions, clicks execute and checks the interactions window. (define (check-language-level lang-spec) diff --git a/drracket/gui-debugger/debug-tool.rkt b/drracket/gui-debugger/debug-tool.rkt index 722ddee82..7a5f94f7d 100644 --- a/drracket/gui-debugger/debug-tool.rkt +++ b/drracket/gui-debugger/debug-tool.rkt @@ -486,26 +486,26 @@ (when (and (send (get-tab) debug?) (not before)) ;; render breakpoints (let ([breakpoints (send (get-tab) get-breakpoints)]) - (for ([(pos enabled?) (in-hash breakpoints)]) - (when (and (>= pos 0) (or enabled? (and mouse-over-pos (= mouse-over-pos pos)))) - (define-values (xl yl xr yr) (find-char-box this pos)) - (define diameter (- xr xl)) - (define yoff (/ (- yr yl diameter) 2)) - (define op (send dc get-pen)) - (define ob (send dc get-brush)) - (case enabled? - [(#t) - (send dc set-pen bp-pen) - (send dc set-brush bp-brush)] - [(#f) - (send dc set-pen bp-mo-pen) - (send dc set-brush bp-mo-brush)] - [else - (send dc set-pen bp-tmp-pen) - (send dc set-brush bp-tmp-brush)]) - (send dc draw-ellipse (+ xl dx) (+ yl dy yoff) diameter diameter) - (send dc set-pen op) - (send dc set-brush ob)))) + (for ([(pos enabled?) (in-hash breakpoints)] + #:when (and (>= pos 0) (or enabled? (and mouse-over-pos (= mouse-over-pos pos))))) + (define-values (xl yl xr yr) (find-char-box this pos)) + (define diameter (- xr xl)) + (define yoff (/ (- yr yl diameter) 2)) + (define op (send dc get-pen)) + (define ob (send dc get-brush)) + (case enabled? + [(#t) + (send dc set-pen bp-pen) + (send dc set-brush bp-brush)] + [(#f) + (send dc set-pen bp-mo-pen) + (send dc set-brush bp-mo-brush)] + [else + (send dc set-pen bp-tmp-pen) + (send dc set-brush bp-tmp-brush)]) + (send dc draw-ellipse (+ xl dx) (+ yl dy yoff) diameter diameter) + (send dc set-pen op) + (send dc set-brush ob))) ;; mark the boundaries of the current stack frame ;; unless we're at the end of the expression and looking at the top frame, ;; in which case just mark the current location @@ -1234,21 +1234,20 @@ (define/public (register-stack-frames frames already-stopped?) (define trimmed-exprs - (map (lambda (frame) - (let ([expr (mark-source frame)]) - (cond - ; should succeed unless the user closes a secondary tab during debugging - [(and expr (filename->defs (syntax-source expr))) - => - (lambda (defs) - (trim-expr-str (if (syntax-position expr) - (send defs get-text - (sub1 (syntax-position expr)) - (+ -1 (syntax-position expr) (syntax-span expr))) - "??") - 15))] - ["??"]))) - frames)) + (for/list ([frame (in-list frames)]) + (define expr (mark-source frame)) + (cond + ; should succeed unless the user closes a secondary tab during debugging + [(and expr (filename->defs (syntax-source expr))) + => + (lambda (defs) + (trim-expr-str (if (syntax-position expr) + (send defs get-text + (sub1 (syntax-position expr)) + (+ -1 (syntax-position expr) (syntax-span expr))) + "??") + 15))] + ["??"]))) (send stack-frames begin-edit-sequence) (send stack-frames lock #f) (unless already-stopped?