diff --git a/collects/mred/private/wx/cocoa/canvas.rkt b/collects/mred/private/wx/cocoa/canvas.rkt index 1c04cf3013..e382b04a4d 100644 --- a/collects/mred/private/wx/cocoa/canvas.rkt +++ b/collects/mred/private/wx/cocoa/canvas.rkt @@ -247,6 +247,7 @@ is-auto-scroll? get-virtual-width get-virtual-height reset-auto-scroll refresh-for-autoscroll + refresh-all-children flush) (define vscroll-ok? (and (or (memq 'vscroll style) @@ -313,9 +314,12 @@ (define/public (get-flush-window) (get-cocoa-window)) + (define/private (refresh-one) + (queue-paint)) (define/override (refresh) ;; can be called from any thread, including the event-pump thread - (queue-paint)) + (refresh-one) + (refresh-all-children)) (define/public (queue-backing-flush) ;; called atomically (not expecting exceptions) @@ -387,7 +391,7 @@ (send dc set-auto-scroll (if (is-auto-scroll?) (scroll-pos h-scroller) 0) (if (is-auto-scroll?) (scroll-pos v-scroller) 0))) - (when refresh? (refresh))) + (when refresh? (refresh-one))) (define/override (get-client-size xb yb) (super get-client-size xb yb) @@ -686,7 +690,7 @@ (or ((NSSize-width s2) . < . (NSSize-width s1)) ((NSSize-height s2) . < . (NSSize-height s1))))) (begin - (queue-window-event this (lambda () (refresh))) + (queue-window-event this (lambda () (refresh-one))) #t))) (define/public (do-scroll direction scroller) @@ -765,7 +769,7 @@ (let ([pos (tell #:type _NSInteger content-cocoa indexOfSelectedItem)]) (when (pos . > . -1) (queue-window-event this (lambda () (on-combo-select pos))))) - (refresh)) + (refresh-one)) (define current-text "") (define/public (set-combo-text t) diff --git a/collects/mred/private/wx/cocoa/frame.rkt b/collects/mred/private/wx/cocoa/frame.rkt index 81f35d6744..dc54e9d969 100644 --- a/collects/mred/private/wx/cocoa/frame.rkt +++ b/collects/mred/private/wx/cocoa/frame.rkt @@ -409,6 +409,10 @@ (set! saved-child child) (on-new-child child #t)) + (define/override (refresh-all-children) + (when saved-child + (send saved-child refresh))) + (define/override (set-cursor c) (when saved-child (send saved-child set-cursor c))) diff --git a/collects/mred/private/wx/cocoa/panel.rkt b/collects/mred/private/wx/cocoa/panel.rkt index e12cac2020..a53c952d46 100644 --- a/collects/mred/private/wx/cocoa/panel.rkt +++ b/collects/mred/private/wx/cocoa/panel.rkt @@ -84,6 +84,10 @@ (define/override (show on?) (super show on?) (fix-dc)) + + (define/override (refresh-all-children) + (for ([child (in-list children)]) + (send child refresh))) (define/public (set-item-cursor x y) (void)))) diff --git a/collects/mred/private/wx/cocoa/window.rkt b/collects/mred/private/wx/cocoa/window.rkt index a772e5756b..e144e05897 100644 --- a/collects/mred/private/wx/cocoa/window.rkt +++ b/collects/mred/private/wx/cocoa/window.rkt @@ -771,7 +771,9 @@ (queue-window-event this thunk)))) (define/public (center a b) (void)) - (define/public (refresh) (void)) + (define/public (refresh) (refresh-all-children)) + + (define/public (refresh-all-children) (void)) (define/public (screen-to-client xb yb) (let ([p (tell #:type _NSPoint (get-cocoa-content) diff --git a/collects/mred/private/wx/gtk/canvas.rkt b/collects/mred/private/wx/gtk/canvas.rkt index 18a994ff4f..1e761486fb 100644 --- a/collects/mred/private/wx/gtk/canvas.rkt +++ b/collects/mred/private/wx/gtk/canvas.rkt @@ -257,7 +257,7 @@ set-auto-size adjust-client-delta infer-client-delta is-auto-scroll? get-virtual-width get-virtual-height - refresh-for-autoscroll + refresh-for-autoscroll refresh-all-children get-eventspace) (define is-combo? (memq 'combo style)) @@ -509,8 +509,11 @@ (define/public (flush) (flush-display)) - (define/override (refresh) + (define/private (refresh-one) (queue-paint)) + (define/override (refresh) + (refresh-one) + (refresh-all-children)) (define/public (queue-backing-flush) ;; called atomically @@ -525,7 +528,7 @@ (define/private (reset-dc) (send dc reset-backing-retained) - (refresh) + (refresh-one) (send dc set-auto-scroll (if (get-virtual-width) (gtk_adjustment_get_value hscroll-adj) diff --git a/collects/mred/private/wx/gtk/frame.rkt b/collects/mred/private/wx/gtk/frame.rkt index f93c2ee9fa..22473af06e 100644 --- a/collects/mred/private/wx/gtk/frame.rkt +++ b/collects/mred/private/wx/gtk/frame.rkt @@ -320,6 +320,10 @@ (define/override (register-child-in-parent on?) (void)) + (define/override (refresh-all-children) + (when saved-child + (send saved-child refresh))) + (define/override (direct-show on?) ;; atomic mode (if on? diff --git a/collects/mred/private/wx/gtk/panel.rkt b/collects/mred/private/wx/gtk/panel.rkt index db88e9ec1a..c62c2ba60b 100644 --- a/collects/mred/private/wx/gtk/panel.rkt +++ b/collects/mred/private/wx/gtk/panel.rkt @@ -60,6 +60,10 @@ (cons child children) (remq child children)))))) + (define/override (refresh-all-children) + (for ([child (in-list children)]) + (send child refresh))) + (define/public (set-item-cursor x y) (void)))) (define (panel-container-mixin %) diff --git a/collects/mred/private/wx/gtk/window.rkt b/collects/mred/private/wx/gtk/window.rkt index 2634c7f701..babc98f286 100644 --- a/collects/mred/private/wx/gtk/window.rkt +++ b/collects/mred/private/wx/gtk/window.rkt @@ -669,7 +669,9 @@ (lambda (thunk) (queue-window-event this thunk))))) (define/public (center a b) (void)) - (define/public (refresh) (void)) + (define/public (refresh) (refresh-all-children)) + + (define/public (refresh-all-children) (void)) (define/public (screen-to-client x y) (let ([xb (box 0)] diff --git a/collects/mred/private/wx/win32/canvas.rkt b/collects/mred/private/wx/win32/canvas.rkt index 0f4cd1e44f..01f022c2c8 100644 --- a/collects/mred/private/wx/win32/canvas.rkt +++ b/collects/mred/private/wx/win32/canvas.rkt @@ -308,7 +308,7 @@ (flush-display)) (define/public (on-paint) (void)) - (define/override (refresh) (queue-paint)) + (define/override (refresh-one) (queue-paint)) (define/public (queue-backing-flush) (unless for-gl? @@ -409,7 +409,7 @@ (define/override (reset-dc-for-autoscroll) (reset-dc) - (refresh)) + (refresh-one)) (define/override (get-virtual-h-pos) (GetScrollPos canvas-hwnd SB_HORZ)) diff --git a/collects/mred/private/wx/win32/frame.rkt b/collects/mred/private/wx/win32/frame.rkt index 396e3e39e4..bd9605051d 100644 --- a/collects/mred/private/wx/win32/frame.rkt +++ b/collects/mred/private/wx/win32/frame.rkt @@ -404,6 +404,10 @@ (void (SetCursor (get-wait-cursor))) (when saved-child (reset-cursor-in-child saved-child default)))) + + (define/override (refresh-all-children) + (when saved-child + (send saved-child refresh))) (define/override (get-dialog-level) 0) diff --git a/collects/mred/private/wx/win32/panel.rkt b/collects/mred/private/wx/win32/panel.rkt index 204a31f16f..bda8be80aa 100644 --- a/collects/mred/private/wx/win32/panel.rkt +++ b/collects/mred/private/wx/win32/panel.rkt @@ -81,6 +81,10 @@ (for ([c (in-list children)]) (send c show-children))) + (define/override (refresh-all-children) + (for ([child (in-list children)]) + (send child refresh))) + (define/override (wants-mouse-capture? control-hwnd) (ptr-equal? (get-client-hwnd) control-hwnd)) diff --git a/collects/mred/private/wx/win32/window.rkt b/collects/mred/private/wx/win32/window.rkt index cfd101f47f..ec41976ec9 100644 --- a/collects/mred/private/wx/win32/window.rkt +++ b/collects/mred/private/wx/win32/window.rkt @@ -339,7 +339,7 @@ (unless (and (= w -1) (= h -1)) (on-resized)) (queue-on-size) - (refresh)) + (refresh-one)) (define/public (move x y) (set-size x y -1 -1)) @@ -405,7 +405,12 @@ (define/public (is-frame?) #f) - (define/public (refresh) (void)) + (define/public (refresh-one) (void)) + (define/public (refresh) + (refresh-one) + (refresh-all-children)) + (define/public (refresh-all-children) (void)) + (define/public (on-resized) (void)) (define/public (screen-to-client x y)