diff --git a/collects/mred/private/wx/common/canvas-mixin.rkt b/collects/mred/private/wx/common/canvas-mixin.rkt index 07c4364f6f..9cf8abd731 100644 --- a/collects/mred/private/wx/common/canvas-mixin.rkt +++ b/collects/mred/private/wx/common/canvas-mixin.rkt @@ -143,7 +143,8 @@ (let ([pq paint-queued]) (when pq (set-box! pq #f))) (set! paint-queued #f) - (when (or (not b) (is-shown-to-root?)) + (cond + [(or (not b) (is-shown-to-root?)) (let ([dc (get-dc)]) (send dc suspend-flush) (send dc ensure-ready) @@ -156,7 +157,11 @@ (send dc set-background old-bg)))) (on-paint) (send dc resume-flush) - (queue-backing-flush)))) + (queue-backing-flush))] + [b ; => not shown to root + ;; invalidate dc so that it's refresh + ;; when it's shown again + (send (get-dc) reset-backing-retained)])) (when req (cancel-canvas-flush-delay req))) diff --git a/collects/mred/private/wx/win32/panel.rkt b/collects/mred/private/wx/win32/panel.rkt index c87ae2ce10..cb58ff65ff 100644 --- a/collects/mred/private/wx/win32/panel.rkt +++ b/collects/mred/private/wx/win32/panel.rkt @@ -22,16 +22,19 @@ (define children null) (define/override (register-child child on?) - (let ([now-on? (and (memq child children) #t)]) + (let ([on? (and on? #t)] + [now-on? (and (memq child children) #t)]) (unless (eq? on? now-on?) (unless on? (when (eq? child mouse-in-child) + (send child send-leaves #f) (set! mouse-in-child #f))) (set! children (if on? (cons child children) (remq child children))) - (send child parent-enable (is-enabled-to-root?))))) + (when on? + (send child parent-enable (is-enabled-to-root?)))))) (define/override (internal-enable on?) (super internal-enable on?) diff --git a/collects/mred/private/wx/win32/window.rkt b/collects/mred/private/wx/win32/window.rkt index d89efe44eb..35b59e24e2 100644 --- a/collects/mred/private/wx/win32/window.rkt +++ b/collects/mred/private/wx/win32/window.rkt @@ -601,12 +601,13 @@ (define/public (send-leaves mk) (set! mouse-in? #f) - (let ([e (mk 'leave)]) - (if (eq? (current-thread) - (eventspace-handler-thread eventspace)) - (handle-mouse-event (get-client-hwnd) 0 0 e) - (queue-window-event this - (lambda () (dispatch-on-event/sync e)))))) + (when mk + (let ([e (mk 'leave)]) + (if (eq? (current-thread) + (eventspace-handler-thread eventspace)) + (handle-mouse-event (get-client-hwnd) 0 0 e) + (queue-window-event this + (lambda () (dispatch-on-event/sync e))))))) (define/public (send-child-leaves mk) #f) diff --git a/collects/mrlib/switchable-button.rkt b/collects/mrlib/switchable-button.rkt index 85e795d9c0..7700c0dd47 100644 --- a/collects/mrlib/switchable-button.rkt +++ b/collects/mrlib/switchable-button.rkt @@ -88,7 +88,8 @@ (define/override (on-superwindow-show show?) (unless show? (set! in? #f) - (set! down? #f)) + (set! down? #f) + (refresh)) (super on-superwindow-show show?)) (define/override (on-event evt)