manage the state for delegates better (used by the drracket contour window)
closes PR 12094 original commit: 38596a9b581c06a7bdc8faba26c8e0cfb1b09492
This commit is contained in:
parent
ce23305a06
commit
48e71d341a
|
@ -1505,15 +1505,22 @@
|
||||||
(send new-snip set-style (send snip get-style))
|
(send new-snip set-style (send snip get-style))
|
||||||
new-snip))
|
new-snip))
|
||||||
|
|
||||||
|
;; todo : (listof (-> void))
|
||||||
|
;; actions that have happened to this editor, but that
|
||||||
|
;; have not yet been propogated to the delegate
|
||||||
(define todo '())
|
(define todo '())
|
||||||
|
|
||||||
(define timer (new timer%
|
(define timer (new timer%
|
||||||
[notify-callback
|
[notify-callback
|
||||||
(λ ()
|
(λ ()
|
||||||
|
;; it should be the case that todo is always '() when the delegate is #f
|
||||||
|
(when delegate
|
||||||
(send delegate begin-edit-sequence)
|
(send delegate begin-edit-sequence)
|
||||||
(for ([th (in-list (reverse todo))])
|
(for ([th (in-list (reverse todo))])
|
||||||
(th))
|
(th))
|
||||||
(send delegate end-edit-sequence)
|
(send delegate end-edit-sequence))
|
||||||
(set! todo '()))]))
|
(set! todo '()))]))
|
||||||
|
|
||||||
(define/private (to-delegate thunk)
|
(define/private (to-delegate thunk)
|
||||||
(when delegate
|
(when delegate
|
||||||
(send timer stop)
|
(send timer stop)
|
||||||
|
@ -1524,6 +1531,25 @@
|
||||||
(inherit get-highlighted-ranges)
|
(inherit get-highlighted-ranges)
|
||||||
(define/public-final (get-delegate) delegate)
|
(define/public-final (get-delegate) delegate)
|
||||||
(define/public-final (set-delegate _d)
|
(define/public-final (set-delegate _d)
|
||||||
|
(set! todo '())
|
||||||
|
|
||||||
|
(when delegate
|
||||||
|
;; the delegate may be in a bad state because we've killed the pending todo
|
||||||
|
;; items; to clear out the bad state, end any edit sequences, and unhighlight
|
||||||
|
;; any highlighted ranges. The rest of the state is reset if the editor
|
||||||
|
;; is ever installed as a delegate again (by refresh-delegate)
|
||||||
|
(let loop ()
|
||||||
|
(when (send delegate in-edit-sequence?)
|
||||||
|
(send delegate end-edit-sequence)
|
||||||
|
(loop)))
|
||||||
|
(for ([range (in-list (send delegate get-highlighted-ranges))])
|
||||||
|
(send delegate unhighlight-range
|
||||||
|
(range-start range)
|
||||||
|
(range-end range)
|
||||||
|
(range-color range)
|
||||||
|
(range-caret-space? range)
|
||||||
|
(range-style range))))
|
||||||
|
|
||||||
(set! delegate _d)
|
(set! delegate _d)
|
||||||
(set! linked-snips (if _d
|
(set! linked-snips (if _d
|
||||||
(make-hasheq)
|
(make-hasheq)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user