From c044d0097a40e4924368d4e74ef66deb0533705b Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Fri, 22 Nov 2013 12:03:16 -0700 Subject: [PATCH] racket/gui cocoa: fix crashing bug with `combo-field%` Merge to v6.0 (cherry picked from commit 9a120f6acc12f3c3221d0630e7e51fd4d4177239) --- pkgs/gui-pkgs/gui-lib/mred/private/wx/cocoa/canvas.rkt | 5 +++-- pkgs/gui-pkgs/gui-test/tests/gracket/item.rkt | 5 ++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/pkgs/gui-pkgs/gui-lib/mred/private/wx/cocoa/canvas.rkt b/pkgs/gui-pkgs/gui-lib/mred/private/wx/cocoa/canvas.rkt index 69be809546..a0baed7457 100644 --- a/pkgs/gui-pkgs/gui-lib/mred/private/wx/cocoa/canvas.rkt +++ b/pkgs/gui-pkgs/gui-lib/mred/private/wx/cocoa/canvas.rkt @@ -692,12 +692,13 @@ #t) (define/public (on-combo-select i) (void)) (define/public (popup-combo) - ;; Pending refresh events intefere with combo popups + ;; Pending refresh events interfere with combo popups ;; for some reason, so flush them: (yield-refresh) (flush) ;; Beware that the `popUp:' method is undocumented: - (tellv (tell content-cocoa cell) popUp: #f)) + (atomically + (tellv (tell content-cocoa cell) popUp: #f))) (define clear-bg? (and (not (memq 'transparent canvas-style)) (not (memq 'no-autoclear canvas-style)))) diff --git a/pkgs/gui-pkgs/gui-test/tests/gracket/item.rkt b/pkgs/gui-pkgs/gui-test/tests/gracket/item.rkt index 8fe4c0a2af..ef979ca037 100644 --- a/pkgs/gui-pkgs/gui-test/tests/gracket/item.rkt +++ b/pkgs/gui-pkgs/gui-test/tests/gracket/item.rkt @@ -1708,7 +1708,9 @@ (define (combo-frame empty?) (define f (make-frame frame% "Combo Test")) (define p f) - (define actual-content '("Apple" "Banana")) + (define actual-content (if empty? + null + '("Apple" "Banana"))) (define (callback c e) (void)) (define c (make-object (class combo-field% (define/override (on-popup e) @@ -2402,6 +2404,7 @@ (make-object button% "Make Choice Frame" cp (lambda (b e) (choice-or-list-frame #f null #f))) (make-object button% "Make Empty Choice Frame" cp (lambda (b e) (choice-or-list-frame #f null #t))) (make-object button% "Make Combo Frame" cp (lambda (b e) (combo-frame #f))) +(make-object button% "Make Empty Combo Frame" cp (lambda (b e) (combo-frame #t))) (define lcp (make-object horizontal-pane% ap)) (send lcp stretchable-width #f) (define list-columns-choice (new choice%