From eb40e63cd12b92641a01db5e81780f023de2466d Mon Sep 17 00:00:00 2001 From: Mike MacHenry Date: Thu, 18 Dec 2003 22:18:36 +0000 Subject: [PATCH] fixed an edit sequence bug but introduced an inefficientcy original commit: 2e9f1f4d0f08ad8ba75251e9e76ff1e6a41dcdd5 --- .../aligned-editor-container.ss | 10 ++++------ .../geometry-managed-pasteboard.ss | 18 ++++++++++++++---- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/collects/mrlib/private/aligned-pasteboard/aligned-editor-container.ss b/collects/mrlib/private/aligned-pasteboard/aligned-editor-container.ss index 9eac86bc..9061f0f3 100644 --- a/collects/mrlib/private/aligned-pasteboard/aligned-editor-container.ss +++ b/collects/mrlib/private/aligned-pasteboard/aligned-editor-container.ss @@ -109,12 +109,10 @@ [(value) (set! stretchable-height-field value)] [() stretchable-height-field])) - ;; resize (number? number? . -> . boolean?) - ;; called to resize the snip - (rename [super-resize resize]) - (define/override (resize width height) - (super-resize width height)) - + ;; (positive? positive? . -> . void?) + ;; called to resize the snip to a given size without effecting its alignd-min-sizes + ;; STATUS: Do I need to override resize and have it set the aligned-min-sizes? + (inherit resize) (define/public (stretch width height) (resize width height) (let ([left (box 0)] diff --git a/collects/mrlib/private/aligned-pasteboard/geometry-managed-pasteboard.ss b/collects/mrlib/private/aligned-pasteboard/geometry-managed-pasteboard.ss index c7be6d84..3b34ea1b 100644 --- a/collects/mrlib/private/aligned-pasteboard/geometry-managed-pasteboard.ss +++ b/collects/mrlib/private/aligned-pasteboard/geometry-managed-pasteboard.ss @@ -18,8 +18,9 @@ ;; mixin to add geometry management to pasteboard with the give type of alignement (define (make-aligned-pasteboard type) (class* pasteboard% (aligned-pasteboard<%>) + (inherit resize move-to find-first-snip refresh-delayed? - begin-edit-sequence end-edit-sequence) + begin-edit-sequence end-edit-sequence is-locked? lock) (field [needs-realign? false] @@ -50,9 +51,15 @@ ;; set-algined-min-sizes (-> void?) ;; set the aligned min width and height of the pasteboard based on it's children snips + (inherit in-edit-sequence?) (define/public (aligned-min-sizes-invalid) - ;; Do I need to dynamic-let ignore-resizing? in here? - (if (refresh-delayed?) + ;; This in-edit-sequence? is not sound. It causes me to percollate invalidation + ;; up the spin of my tree even when it is not visible (which refresh-delayed? + ;; checks for. However, for some types of refreshed-delayed? blocks, like a + ;; parent editor's edit-sequence, I have not yet figured out a way to reshedule + ;; an alignment. With in-edit-sequence? blocking, I know I'll always get the + ;; after-edit-sequence call where I can invoke alignment. + (if (in-edit-sequence?) ;(refresh-delayed?) (set! needs-realign? true) (begin (set! needs-realign? false) @@ -80,7 +87,10 @@ (align type alloted-width alloted-height (map-snip build-rect first-snip))]) (begin-edit-sequence) - (for-each-snip move/resize first-snip aligned-rects) + (let ([was-locked? (is-locked?)]) + (lock false) + (for-each-snip move/resize first-snip aligned-rects) + (lock was-locked?)) (end-edit-sequence))))) ;;move/resize (snip-pos? rect? . -> . void?)