diff --git a/collects/mred/private/wxtextfield.ss b/collects/mred/private/wxtextfield.ss index 990e6b6950..4ecd803007 100644 --- a/collects/mred/private/wxtextfield.ss +++ b/collects/mred/private/wxtextfield.ss @@ -142,6 +142,7 @@ [p (if horiz? this (let ([p (make-object wx-vertical-pane% #f proxy this null)]) + (send p skip-subwindow-events? #t) (send (send p area-parent) add-child p) p))]) (sequence @@ -166,7 +167,9 @@ '(hide-hscroll)) '(hide-vscroll hide-hscroll))))]) (sequence + (send c skip-subwindow-events? #t) (when l + (send l skip-subwindow-events? #t) (send l x-margin 0)) (send c set-x-margin 2) (send c set-y-margin 2) diff --git a/collects/mred/private/wxwindow.ss b/collects/mred/private/wxwindow.ss index a05e0c471e..8e708a7863 100644 --- a/collects/mred/private/wxwindow.ss +++ b/collects/mred/private/wxwindow.ss @@ -18,29 +18,36 @@ [focus? #f] [container this] [visible? #f] - [active? #f]) + [active? #f] + [skip-sub-events? #f]) (public [on-visible (lambda () (let ([vis? (is-shown-to-root?)]) (unless (eq? vis? visible?) (set! visible? vis?) - (as-exit - (lambda () - (send (wx->proxy this) on-superwindow-show vis?))))))] + (unless skip-sub-events? + (as-exit + (lambda () + (send (wx->proxy this) on-superwindow-show vis?)))))))] [queue-visible (lambda () (parameterize ([wx:current-eventspace (send (get-top-level) get-eventspace)]) - (wx:queue-callback (entry-point (lambda () (on-visible))) wx:middle-queue-key)))]) + (wx:queue-callback (entry-point (lambda () (on-visible))) wx:middle-queue-key)))] + [skip-subwindow-events? + (case-lambda + [() skip-sub-events?] + [(skip?) (set! skip-sub-events? skip?)])]) (public [on-active (lambda () (let ([act? (is-enabled-to-root?)]) (unless (eq? act? active?) (set! active? act?) - (as-exit - (lambda () - (send (wx->proxy this) on-superwindow-enable act?))))))] + (unless skip-sub-events? + (as-exit + (lambda () + (send (wx->proxy this) on-superwindow-enable act?)))))))] [queue-active (lambda () (parameterize ([wx:current-eventspace (send (get-top-level) get-eventspace)]) @@ -127,7 +134,7 @@ (define (make-window-glue% %) ; implies make-glue% (class100 (make-glue% %) (mred proxy . args) - (inherit get-x get-y get-width get-height area-parent get-mred get-proxy) + (inherit get-x get-y get-width get-height area-parent get-mred get-proxy skip-subwindow-events?) (private-field [pre-wx->proxy (lambda (orig-w e k) ;; MacOS: w may not be something the user knows @@ -211,16 +218,20 @@ (as-exit (lambda () (super on-kill-focus)))))] [pre-on-char (lambda (w e) (or (super pre-on-char w e) - (as-entry - (lambda () - (pre-wx->proxy w e - (lambda (m e) - (as-exit (lambda () - (send (get-proxy) on-subwindow-char m e)))))))))] + (if (skip-subwindow-events?) + #f + (as-entry + (lambda () + (pre-wx->proxy w e + (lambda (m e) + (as-exit (lambda () + (send (get-proxy) on-subwindow-char m e))))))))))] [pre-on-event (entry-point (lambda (w e) - (pre-wx->proxy w e - (lambda (m e) - (as-exit (lambda () - (send (get-proxy) on-subwindow-event m e)))))))]) + (if (skip-subwindow-events?) + #f + (pre-wx->proxy w e + (lambda (m e) + (as-exit (lambda () + (send (get-proxy) on-subwindow-event m e))))))))]) (sequence (apply super-init mred proxy args)))))