factor/library/cocoa/application-utils.factor

52 lines
1.4 KiB
Factor

! Copyright (C) 2006 Slava Pestov
! See http://factorcode.org/license.txt for BSD license.
IN: cocoa
USING: alien errors gadgets io kernel namespaces objc
objc-NSApplication objc-NSAutoreleasePool objc-NSException
objc-NSNotificationCenter objc-NSObject objc-NSView sequences
threads ;
: with-autorelease-pool ( quot -- )
NSAutoreleasePool [new] slip [release] ; inline
: NSApp NSApplication [sharedApplication] ;
: with-cocoa ( quot -- )
[ NSApp drop call ] with-autorelease-pool ;
: <NSString> <CFString> [autorelease] ;
: CFRunLoopDefaultMode "kCFRunLoopDefaultMode" <NSString> ;
: next-event ( app -- event )
0 f CFRunLoopDefaultMode 1
[nextEventMatchingMask:untilDate:inMode:dequeue:] ;
: do-event ( app -- ? )
[
dup next-event [ [sendEvent:] t ] [ drop f ] if*
] with-autorelease-pool ;
: do-events ( app -- )
dup do-event [ do-events ] [ drop ] if ;
: event-loop ( -- )
[ NSApp do-events ui-step ] with-autorelease-pool
event-loop ;
: add-observer ( observer selector name object -- )
>r >r >r >r NSNotificationCenter [defaultCenter] r> r>
sel_registerName r> r> [addObserver:selector:name:object:] ;
: remove-observer ( observer -- )
>r NSNotificationCenter [defaultCenter] r>
[removeObserver:] ;
: finish-launching ( -- ) NSApp [finishLaunching] ;
IN: errors
: objc-error. ( error -- )
"Objective C exception:" print
third [reason] CF>string print ;