summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Fl_cocoa.mm61
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