cocoa: Allow ?-> syntax for methods that might not exist.
If a method doesn't exist we need to provide a signature so the stack is balanced. This should also allow deploying from macOS versions that do not contain methods to ones that do. This is an alternative to asking a class if it provides a selector.char-rename
parent
f7ce73b962
commit
d838f95370
|
@ -14,6 +14,8 @@ SYMBOL: sent-messages
|
||||||
|
|
||||||
SYNTAX: -> scan-token dup remember-send suffix! \ send suffix! ;
|
SYNTAX: -> scan-token dup remember-send suffix! \ send suffix! ;
|
||||||
|
|
||||||
|
SYNTAX: ?-> scan-token dup remember-send suffix! \ ?send suffix! ;
|
||||||
|
|
||||||
SYNTAX: SEL:
|
SYNTAX: SEL:
|
||||||
scan-token
|
scan-token
|
||||||
[ remember-send ]
|
[ remember-send ]
|
||||||
|
|
|
@ -86,6 +86,14 @@ MACRO: (send) ( selector super? -- quot )
|
||||||
|
|
||||||
: send ( receiver args... selector -- return... ) f (send) ; inline
|
: send ( receiver args... selector -- return... ) f (send) ; inline
|
||||||
|
|
||||||
|
MACRO:: (?send) ( effect selector super? -- quot )
|
||||||
|
selector dup ?lookup-method effect or super?
|
||||||
|
[ make-prepare-send ] 2keep
|
||||||
|
super-message-senders message-senders ? get at
|
||||||
|
[ 1quotation append ] [ effect selector sender-stub 1quotation append ] if* ;
|
||||||
|
|
||||||
|
: ?send ( receiver args... selector effect -- return... ) f (?send) ; inline
|
||||||
|
|
||||||
: super-send ( receiver args... selector -- return... ) t (send) ; inline
|
: super-send ( receiver args... selector -- return... ) t (send) ; inline
|
||||||
|
|
||||||
! Runtime introspection
|
! Runtime introspection
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
! Copyright (C) 2017 Doug Coleman.
|
! Copyright (C) 2017 Doug Coleman.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors alien.enums alien.syntax cocoa cocoa.classes
|
USING: accessors alien.c-types alien.enums alien.syntax cocoa
|
||||||
cocoa.messages combinators core-foundation.strings kernel locals
|
cocoa.classes cocoa.messages cocoa.runtime combinators
|
||||||
namespaces sequences words ;
|
core-foundation.strings kernel locals namespaces sequences words ;
|
||||||
IN: cocoa.touchbar
|
IN: cocoa.touchbar
|
||||||
|
|
||||||
! ui.backend.cocoa.views creates buttons for each of these actions
|
! ui.backend.cocoa.views creates buttons for each of these actions
|
||||||
|
@ -15,17 +15,17 @@ ENUM: default-touchbar refresh-all-action auto-use-action ;
|
||||||
|
|
||||||
: make-touchbar ( enum self -- touchbar )
|
: make-touchbar ( enum self -- touchbar )
|
||||||
[ NSTouchBar -> alloc -> init dup ] dip -> setDelegate: {
|
[ NSTouchBar -> alloc -> init dup ] dip -> setDelegate: {
|
||||||
[ swap enum>CFStringArray -> setDefaultItemIdentifiers: ]
|
[ swap enum>CFStringArray { void { id SEL id } } ?-> setDefaultItemIdentifiers: ]
|
||||||
[ swap enum>CFStringArray -> setCustomizationAllowedItemIdentifiers: ]
|
[ swap enum>CFStringArray { void { id SEL id } } ?-> setCustomizationAllowedItemIdentifiers: ]
|
||||||
[ nip ]
|
[ nip ]
|
||||||
} 2cleave ;
|
} 2cleave ;
|
||||||
|
|
||||||
:: make-NSTouchBar-button ( self identifier label-string action-string -- button )
|
:: make-NSTouchBar-button ( self identifier label-string action-string -- button )
|
||||||
NSCustomTouchBarItem -> alloc
|
NSCustomTouchBarItem -> alloc
|
||||||
identifier <CFString> -> initWithIdentifier: :> item
|
identifier <CFString> { id { id SEL id } } ?-> initWithIdentifier: :> item
|
||||||
NSButton
|
NSButton
|
||||||
label-string <CFString>
|
label-string <CFString>
|
||||||
self
|
self
|
||||||
action-string lookup-selector -> buttonWithTitle:target:action: :> button
|
action-string lookup-selector { id { id SEL id id SEL } } ?-> buttonWithTitle:target:action: :> button
|
||||||
item button -> setView:
|
item button -> setView:
|
||||||
item ;
|
item ;
|
||||||
|
|
Loading…
Reference in New Issue