From b5258e0e2b60875564191a33323314de64c7520d Mon Sep 17 00:00:00 2001 From: Robby Findler Date: Sun, 3 Jun 2012 09:19:35 -0500 Subject: [PATCH] In the multi-file search window, only re-load the file in the bottom window when it really is a different file (ie, using a same-file predicate that involves opening the files and comparing the ports) closes PR 12635 (hopefully -- if not, then we can reopen) --- collects/drracket/private/multi-file-search.rkt | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/collects/drracket/private/multi-file-search.rkt b/collects/drracket/private/multi-file-search.rkt index 3523a05253..02ad7ef13a 100644 --- a/collects/drracket/private/multi-file-search.rkt +++ b/collects/drracket/private/multi-file-search.rkt @@ -240,7 +240,8 @@ (set-position new-line-position new-line-position) (send zoom-text begin-edit-sequence) (send zoom-text lock #f) - (send zoom-text load-file/gui-error full-filename) + (unless (really-same-file? full-filename (send zoom-text get-filename)) + (send zoom-text load-file/gui-error full-filename)) (send zoom-text set-position (send zoom-text paragraph-start-position line-number)) (let ([start (+ (send zoom-text paragraph-start-position line-number) col-number)]) @@ -299,6 +300,20 @@ (set-styles-sticky #f) (insert (string-constant mfs-searching...)))) + (define (really-same-file? fn1 fn2) + (define p1 (with-handlers ((exn:fail? (λ (x) #f))) (open-input-file fn1))) + (define p2 (with-handlers ((exn:fail? (λ (x) #f))) (open-input-file fn2))) + (cond + [(and p1 p2) + (begin0 + (= (port-file-identity p1) (port-file-identity p2)) + (close-input-port p1) + (close-input-port p2))] + [else + (when p1 (close-input-port p1)) + (when p2 (close-input-port p2)) + #f])) + ;; collaborates with search-size-frame% (define searching-canvas% (class canvas:basic%