Skip to content

Commit

Permalink
Mac OS: Greatly simplified the open document handler.
Browse files Browse the repository at this point in the history
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@8865 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
  • Loading branch information
Manolo Gouy authored and Manolo Gouy committed Jul 19, 2011
1 parent 4f4a8fc commit 5b98e80
Showing 1 changed file with 11 additions and 50 deletions.
61 changes: 11 additions & 50 deletions src/Fl_cocoa.mm
Expand Up @@ -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];
}
}


Expand Down Expand Up @@ -983,6 +933,7 @@ - (void)applicationWillResignActive:(NSNotification *)notify;
- (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
Expand Down Expand Up @@ -1217,6 +1168,16 @@ - (id)windowWillReturnFieldEditor:(NSWindow *)sender toObject:(id)client
}
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
Expand Down

0 comments on commit 5b98e80

Please sign in to comment.