diff --git a/collects/mred/private/wx/cocoa/canvas.rkt b/collects/mred/private/wx/cocoa/canvas.rkt index 5ba1e691c0..58a7b31161 100644 --- a/collects/mred/private/wx/cocoa/canvas.rkt +++ b/collects/mred/private/wx/cocoa/canvas.rkt @@ -248,6 +248,11 @@ (not (send dc can-backing-flush?))) (do-on-paint #f #f))) + (define/public (begin-refresh-sequence) + (send dc suspend-flush)) + (define/public (end-refresh-sequence) + (send dc resume-flush)) + (define/override (refresh) ;; can be called from any thread, including the event-pump thread (queue-paint)) diff --git a/collects/mred/private/wx/cocoa/dc.rkt b/collects/mred/private/wx/cocoa/dc.rkt index 2737d8a44a..1925bd7cd7 100644 --- a/collects/mred/private/wx/cocoa/dc.rkt +++ b/collects/mred/private/wx/cocoa/dc.rkt @@ -57,6 +57,8 @@ (cairo_surface_destroy s) (set! s #f))))) +(define-local-member-name end-delay) + (define dc% (class backing-dc% (init [(cnvs canvas)]) @@ -94,10 +96,12 @@ (define/override (resume-flush) (atomically (set! suspend-count (sub1 suspend-count)) - (when (and (zero? suspend-count) req) - (cancel-flush-delay req) - (set! req #f)) - (super resume-flush))))) + (super resume-flush))) + + (define/public (end-delay) + (when (and (zero? suspend-count) req) + (cancel-flush-delay req) + (set! req #f))))) (define (do-backing-flush canvas dc ctx dx dy) (tellv ctx saveGraphicsState) @@ -124,4 +128,5 @@ (cairo_set_source cr s) (cairo_pattern_destroy s)) (cairo_destroy cr)))))) - (tellv ctx restoreGraphicsState))) + (tellv ctx restoreGraphicsState) + (send dc end-delay))) diff --git a/collects/mred/private/wx/cocoa/frame.rkt b/collects/mred/private/wx/cocoa/frame.rkt index 98a89cace3..c6f01ec355 100644 --- a/collects/mred/private/wx/cocoa/frame.rkt +++ b/collects/mred/private/wx/cocoa/frame.rkt @@ -262,15 +262,20 @@ "the eventspace hash been shutdown")) (when saved-child (if (eq? (current-thread) (eventspace-handler-thread es)) - (send saved-child paint-children) + (do-paint-children) (let ([s (make-semaphore)]) (queue-callback (lambda () - (when saved-child - (send saved-child paint-children)) + (do-paint-children) (semaphore-post s))) - (sync/timeout 0.2 s)))))) + (sync/timeout 1 s)))))) (direct-show on?)) + (define/private (do-paint-children) + (when saved-child + (send saved-child paint-children)) + (yield-refresh) + (try-to-sync-refresh)) + (define/public (destroy) (when child-sheet (send child-sheet destroy)) (direct-show #f)) diff --git a/collects/mred/private/wx/cocoa/platform.rkt b/collects/mred/private/wx/cocoa/platform.rkt index 345eefbec3..79f163678a 100644 --- a/collects/mred/private/wx/cocoa/platform.rkt +++ b/collects/mred/private/wx/cocoa/platform.rkt @@ -78,8 +78,6 @@ set-combo-box-font get-double-click-time run-printout - end-refresh-sequence - begin-refresh-sequence file-creator-and-type send-event set-executer diff --git a/collects/mred/private/wx/cocoa/procs.rkt b/collects/mred/private/wx/cocoa/procs.rkt index 0074429887..877d537a12 100644 --- a/collects/mred/private/wx/cocoa/procs.rkt +++ b/collects/mred/private/wx/cocoa/procs.rkt @@ -30,8 +30,6 @@ set-executer send-event file-creator-and-type - begin-refresh-sequence - end-refresh-sequence run-printout get-double-click-time set-combo-box-font diff --git a/collects/mred/private/wx/cocoa/window.rkt b/collects/mred/private/wx/cocoa/window.rkt index 7dbac31ba4..33ad82cc00 100644 --- a/collects/mred/private/wx/cocoa/window.rkt +++ b/collects/mred/private/wx/cocoa/window.rkt @@ -130,7 +130,7 @@ (super-tell #:type _void keyDown: event))] [-a _void (keyUp: [_id event]) (unless (do-key-event wxb event self #f) - (super-tell #:type _void keyDown: event))] + (super-tell #:type _void keyUp: event))] [-a _void (insertText: [_NSString str]) (let ([cit (current-insert-text)]) (if cit @@ -455,7 +455,10 @@ ;; re-sync the display in case a stream of ;; events (e.g., key repeat) have a corersponding ;; stream of screen updates. - (void)) + (try-to-sync-refresh) + (let ([cocoa-win (get-cocoa-window)]) + (when cocoa-win + (tellv cocoa-win flushWindowIfNeeded)))) (define/public (dispatch-on-char/sync e) (pre-event-refresh) diff --git a/collects/mred/private/wx/gtk/canvas.rkt b/collects/mred/private/wx/gtk/canvas.rkt index 33bf7755f7..2c209f1cd5 100644 --- a/collects/mred/private/wx/gtk/canvas.rkt +++ b/collects/mred/private/wx/gtk/canvas.rkt @@ -373,6 +373,9 @@ (define/public (on-paint) (void)) + (define/public (begin-refresh-sequence) (void)) + (define/public (end-refresh-sequence) (void)) + (define/override (refresh) (queue-paint)) diff --git a/collects/mred/private/wx/gtk/platform.rkt b/collects/mred/private/wx/gtk/platform.rkt index c398f82bb0..2bc65319f8 100644 --- a/collects/mred/private/wx/gtk/platform.rkt +++ b/collects/mred/private/wx/gtk/platform.rkt @@ -78,8 +78,6 @@ set-combo-box-font get-double-click-time run-printout - end-refresh-sequence - begin-refresh-sequence file-creator-and-type send-event set-executer diff --git a/collects/mred/private/wx/gtk/procs.rkt b/collects/mred/private/wx/gtk/procs.rkt index 23a7f8a002..c7e91cbd38 100644 --- a/collects/mred/private/wx/gtk/procs.rkt +++ b/collects/mred/private/wx/gtk/procs.rkt @@ -34,8 +34,6 @@ set-executer send-event file-creator-and-type - begin-refresh-sequence - end-refresh-sequence run-printout get-double-click-time set-combo-box-font @@ -84,8 +82,6 @@ (case-lambda [(path cr ty) (void)] [(path) (values #"????" #"????")])) -(define (begin-refresh-sequence) (void)) -(define (end-refresh-sequence) (void)) (define-unimplemented run-printout) (define (get-double-click-time) 250) (define (set-combo-box-font f) (void)) diff --git a/collects/mred/private/wx/platform.rkt b/collects/mred/private/wx/platform.rkt index 69690c9889..3f5842a557 100644 --- a/collects/mred/private/wx/platform.rkt +++ b/collects/mred/private/wx/platform.rkt @@ -56,8 +56,6 @@ set-combo-box-font get-double-click-time run-printout - end-refresh-sequence - begin-refresh-sequence file-creator-and-type send-event set-executer diff --git a/collects/mred/private/wx/win32/platform.rkt b/collects/mred/private/wx/win32/platform.rkt index 9e8ccdfa82..61d922b774 100644 --- a/collects/mred/private/wx/win32/platform.rkt +++ b/collects/mred/private/wx/win32/platform.rkt @@ -77,8 +77,6 @@ set-combo-box-font get-double-click-time run-printout - end-refresh-sequence - begin-refresh-sequence file-creator-and-type send-event set-executer diff --git a/collects/mred/private/wx/win32/procs.rkt b/collects/mred/private/wx/win32/procs.rkt index 120851f66e..844fbca456 100644 --- a/collects/mred/private/wx/win32/procs.rkt +++ b/collects/mred/private/wx/win32/procs.rkt @@ -24,8 +24,6 @@ set-executer send-event file-creator-and-type - begin-refresh-sequence - end-refresh-sequence run-printout get-double-click-time set-combo-box-font @@ -76,8 +74,6 @@ (define-unimplemented set-executer) (define-unimplemented send-event) (define-unimplemented file-creator-and-type) -(define-unimplemented begin-refresh-sequence) -(define-unimplemented end-refresh-sequence) (define-unimplemented run-printout) (define-unimplemented get-double-click-time) (define-unimplemented set-combo-box-font) diff --git a/collects/mred/private/wxme/editor-canvas.rkt b/collects/mred/private/wxme/editor-canvas.rkt index 9853ae4d73..cb492ed0d6 100644 --- a/collects/mred/private/wxme/editor-canvas.rkt +++ b/collects/mred/private/wxme/editor-canvas.rkt @@ -159,7 +159,9 @@ get-scroll-range set-scroll-range is-shown-to-root? show-scrollbars - set-focus) + set-focus + begin-refresh-sequence + end-refresh-sequence) (define blink-timer #f) (define noloop? #f) diff --git a/collects/mred/private/wxme/wx.rkt b/collects/mred/private/wxme/wx.rkt index 1be64b3f95..fd248acff1 100644 --- a/collects/mred/private/wxme/wx.rkt +++ b/collects/mred/private/wxme/wx.rkt @@ -42,8 +42,6 @@ the-clipboard the-x-selection-clipboard get-double-click-threshold - begin-refresh-sequence - end-refresh-sequence begin-busy-cursor end-busy-cursor hide-cursor