A big booo to Apples Documentation once again. In a very boring Human-Computer-Interaction-Lecture I finally went along with my Hattrick-Viewer-Project, which slept for some months. Todays task look quite simple: Add the possibility to drag a Link onto the Application, so that the URL of the Link gets evaluated and the match behind the Link gets added to the HT-Live-List.
Dropping the Link to the Applications Main-Window is easy and well documented. But I wanted to enable dropping links to the Dock-Icon too, and this was sorta trickier than I expected…
The Drag and Drop Programming Topics Drag and Drop Programming Topics did not tell me anything.
Next source to look was the NSApplication API: Nada. Well, almost nada. Google sent me to Stone.com with the procedure of Registering the Dock-Symbol for Drops of Files via the Info.plist-key CFBundleDocumentTypes and implementing the NSApp-Delegate’s
-(BOOL)application:(NSApplication *)sender openFile:(NSString *)path (this text gives a great introduction too normal drag and drop as well…)
Well, what do we register? Of course NSURLPboardType and webloc-Files.
Naaaa, this does not work too well. It doesn’t accept Links dragged out of a Page in Safari nor out of Safari’s Adress Bar. And if you drop the webloc-File on it, you do get the File and it’s path, but you must extract the URL out of the File’s Ressource Fork. Obviously, this is not the thing I looked for, there must be something better.
Of course there is. I found it via a french Cocoa-Board which prevailed in Googles Cache. The trick really is easy:
In your Info.plist, add the following key:
Now, register your app in the NSAppleEventManager (e.g. in the Main-Controller’s awakeFromNib):
andEventID: kAEGetURL ]; [/code]
And implement the selector
[code]- (void)getUrl:(NSAppleEventDescriptor *)event
keyDirectObject] stringValue ];
And do with *result whatever you want…
It’s okay if this is done via the NSAppleEventManager, although I really think that this is something you should make available to NSApp’s Delegate, and the Dock really does not carry me to a Foundation-class in the first place. But please: If you write a Programming Topic for Drag and Drop: Why don’t you even mention this Class?