diff --git a/collects/drscheme/private/embedded-snip-utils.ss b/collects/drscheme/private/embedded-snip-utils.ss index c8cf3b7504..95d51362eb 100644 --- a/collects/drscheme/private/embedded-snip-utils.ss +++ b/collects/drscheme/private/embedded-snip-utils.ss @@ -9,59 +9,40 @@ ;; find-syntax-source-editor: syntax-source text% -> (or/c editor #f) ;; Looks for an embedded snip editor whose source is the a-stx-source. ;; -;; Note: this is a copy-and-paste from syncheck. +;; [dyoo] Note: this is a copy-and-paste from syncheck. ;; I've ripping out the editor caches for now, ;; until I get comments from others about this. (define (find-syntax-source-editor a-stx-source defs-text) (let txt-loop ([text defs-text]) - (cond - [(and (is-a? text text:basic<%>) - (or (send text port-name-matches? a-stx-source) - (eq? text a-stx-source))) - text] - [else - (let snip-loop ([snip (send text find-first-snip)]) - (cond - [(not snip) - #f] - [(and (is-a? snip editor-snip%) - (send snip get-editor)) - (or (txt-loop (send snip get-editor)) - (snip-loop (send snip next)))] - [else - (snip-loop (send snip next))]))]))) - - + (if (and (is-a? text text:basic<%>) + (or (send text port-name-matches? a-stx-source) + (eq? text a-stx-source))) + text + (let snip-loop ([snip (send text find-first-snip)]) + (cond [(not snip) #f] + [(and (is-a? snip editor-snip%) (send snip get-editor)) + (or (txt-loop (send snip get-editor)) + (snip-loop (send snip next)))] + [else (snip-loop (send snip next))]))))) ;; get-enclosing-editor-frame: editor<%> -> (or/c frame% #f) ;; Returns the enclosing frame of an-editor, or #f if we can't find it. (define (get-enclosing-editor-frame an-editor) + (define (topwin) + (let ([canvas (send an-editor get-canvas)]) + (and canvas (send canvas get-top-level-window)))) (let ([admin (send an-editor get-admin)]) - (cond - [(and admin (is-a? admin editor-snip-editor-admin<%>)) - (let* ([enclosing-editor-snip (send admin get-snip)]) - (cond - [(get-snip-outer-editor enclosing-editor-snip) - (get-enclosing-editor-frame (get-snip-outer-editor enclosing-editor-snip))] - [else - (let ([canvas (send an-editor get-canvas)]) - (and canvas - (send canvas get-top-level-window)))]))] - [else - (let ([canvas (send an-editor get-canvas)]) - (and canvas - (send canvas get-top-level-window)))]))) - - + (if (and admin (is-a? admin editor-snip-editor-admin<%>)) + (let ([enclosing-editor-snip (send admin get-snip)]) + (if (get-snip-outer-editor enclosing-editor-snip) + (get-enclosing-editor-frame (get-snip-outer-editor + enclosing-editor-snip)) + (topwin))) + (topwin)))) ;; get-snip-outer-editor: snip% -> (or/c editor<%> #f) ;; Returns the immediate outer editor enclosing the snip, or false if we ;; can't find it. (define (get-snip-outer-editor a-snip) - (cond - [(send a-snip get-admin) - (let* ([snip-admin (send a-snip get-admin)] - [enclosing-editor (send snip-admin get-editor)]) - enclosing-editor)] - [else - #f])) \ No newline at end of file + (let ([admin (send a-snip get-admin)]) + (and admin (send snip-admin get-editor))))