! 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 ; : [autorelease] ; : CFRunLoopDefaultMode "kCFRunLoopDefaultMode" ; : 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 ;