diff options
| author | Manolo Gouy <Manolo> | 2011-07-19 13:26:52 +0000 |
|---|---|---|
| committer | Manolo Gouy <Manolo> | 2011-07-19 13:26:52 +0000 |
| commit | 5b98e80a4f223c8d04fc96e2e3bcf59e760558f8 (patch) | |
| tree | 291492db6e067d0352e2cb5cbc4311044561d523 /src | |
| parent | 4f4a8fc3c7c65585a021bd4f9c7975e3ca3d665d (diff) | |
Mac OS: Greatly simplified the open document handler.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@8865 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src')
| -rw-r--r-- | src/Fl_cocoa.mm | 61 |
1 files changed, 11 insertions, 50 deletions
diff --git a/src/Fl_cocoa.mm b/src/Fl_cocoa.mm index 8d664fb71..8c69d4631 100644 --- a/src/Fl_cocoa.mm +++ b/src/Fl_cocoa.mm @@ -891,64 +891,14 @@ static void cocoaKeyboardHandler(NSEvent *theEvent) /* * Open callback function to call... */ - static void (*open_cb)(const char *) = 0; - /* * Install an open documents event handler... */ -@interface FLAppleEventHandler : NSObject -{ -} -- (void)handleAppleEvent:(NSAppleEventDescriptor *)event withReplyEvent: (NSAppleEventDescriptor *)replyEvent; -@end -@implementation FLAppleEventHandler -- (void)handleAppleEvent:(NSAppleEventDescriptor *)event withReplyEvent: (NSAppleEventDescriptor *)replyEvent -{ - NSAppleEventDescriptor *single = [event descriptorAtIndex:1]; - const AEDesc *document = [single aeDesc]; - long i, n; - FSRef fileRef; - AEKeyword keyWd; - DescType typeCd; - Size actSz; - char filename[1024]; - // Lock access to FLTK in this thread... - fl_lock_function(); - - // Open the documents via the callback... - if (AECountItems(document, &n) == noErr) { - for (i = 1; i <= n; i ++) { - AEGetNthPtr(document, i, typeFSRef, &keyWd, &typeCd, - (Ptr)&fileRef, sizeof(fileRef), - (actSz = sizeof(fileRef), &actSz)); - FSRefMakePath( &fileRef, (UInt8*)filename, sizeof(filename) ); - - (*open_cb)(filename); - } - } - // Unlock access to FLTK for all threads... - fl_unlock_function(); -} -@end - void fl_open_callback(void (*cb)(const char *)) { - static NSAppleEventManager *aeventmgr = nil; - static FLAppleEventHandler *handler; fl_open_display(); - if (!aeventmgr) { - aeventmgr = [NSAppleEventManager sharedAppleEventManager]; - handler = [[FLAppleEventHandler alloc] init]; - } - open_cb = cb; - if (cb) { - [aeventmgr setEventHandler:handler andSelector:@selector(handleAppleEvent:withReplyEvent:) - forEventClass:kCoreEventClass andEventID:kAEOpenDocuments]; - } else { - [aeventmgr removeEventHandlerForEventClass:kCoreEventClass andEventID:kAEOpenDocuments]; - } } @@ -983,6 +933,7 @@ extern "C" { - (void)applicationWillHide:(NSNotification *)notify; - (void)applicationWillUnhide:(NSNotification *)notify; - (id)windowWillReturnFieldEditor:(NSWindow *)sender toObject:(id)client; +- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename; @end @implementation FLDelegate - (void)windowDidMove:(NSNotification *)notif @@ -1217,6 +1168,16 @@ extern "C" { } return nil; } +- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename +{ + if (open_cb) { + fl_lock_function(); + (*open_cb)([filename UTF8String]); + fl_unlock_function(); + return YES; + } + return NO; +} @end @implementation FLApplication |
