From 8ebbd3dfee13b781b48932ce0e13bc55686eff79 Mon Sep 17 00:00:00 2001 From: Asumu Takikawa Date: Tue, 3 Feb 2015 16:34:08 -0500 Subject: [PATCH] GUI type fixes Due to either typos in documentation, adjustment to make contract generation easier, or where a more precise type than documented is needed for real uses. --- typed-racket-more/typed/private/framework-types.rkt | 9 ++++++--- typed-racket-more/typed/racket/private/gui-types.rkt | 5 ++++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/typed-racket-more/typed/private/framework-types.rkt b/typed-racket-more/typed/private/framework-types.rkt index 3da82994..0980825e 100644 --- a/typed-racket-more/typed/private/framework-types.rkt +++ b/typed-racket-more/typed/private/framework-types.rkt @@ -448,11 +448,14 @@ (Class #:row-var r #:implements Frame:Basic<%>))) (define-type Frame:Focus-Table<%> - (Class #:implements Frame%)) + (Class #:implements Top-Level-Window<%>)) +;; The documentation claims this should be applied to frames, but +;; the implementation and its uses in practice (such as in DrRacket) +;; apply it to other top level windows like dialog% instances. (define-type Frame:Focus-Table-Mixin (All (r #:row) - (Class #:row-var r #:implements Frame%) + (Class #:row-var r #:implements Top-Level-Window<%>) -> (Class #:row-var r #:implements Frame:Focus-Table<%>))) @@ -1513,7 +1516,7 @@ [Boolean (U 'high 'low) (U 'rectangle 'ellipse 'hollow-ellipse 'dot) - #:adjust-on-insert/delete Boolean + #:adjust-on-insert/delete? Boolean #:key Any] . ->* . ; FIXME: result type depends on `adjust-on-insert/delete` (U Void (-> Void)))] diff --git a/typed-racket-more/typed/racket/private/gui-types.rkt b/typed-racket-more/typed/racket/private/gui-types.rkt index 6e7b9a3a..cfa10fd4 100644 --- a/typed-racket-more/typed/racket/private/gui-types.rkt +++ b/typed-racket-more/typed/racket/private/gui-types.rkt @@ -610,7 +610,10 @@ (define-type Area<%> (Class [get-graphical-min-size (-> (Values Natural Natural))] [get-parent (-> (Option (Instance Area-Container<%>)))] - [get-top-level-window (-> (U (Instance Frame%) (Instance Dialog%)))] + ;; The documentation says this returns a frame% or dialog%, + ;; but giving it that type doesn't work for contract generation + ;; because it creates an `or/c` of two class contracts. + [get-top-level-window (-> (Instance Top-Level-Window<%>))] [min-width (case-> (-> Integer) (Integer -> Void))] [min-height (case-> (-> Integer)