summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManolo Gouy <Manolo>2011-07-19 13:26:52 +0000
committerManolo Gouy <Manolo>2011-07-19 13:26:52 +0000
commit5b98e80a4f223c8d04fc96e2e3bcf59e760558f8 (patch)
tree291492db6e067d0352e2cb5cbc4311044561d523
parent4f4a8fc3c7c65585a021bd4f9c7975e3ca3d665d (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
-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