[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Error in -NSURL writeToPasteboard:
From: |
Wolfgang Lux |
Subject: |
Re: Error in -NSURL writeToPasteboard: |
Date: |
Tue, 24 Apr 2012 10:37:05 +0200 |
Fred Kiefer wrote:
> On 24.04.2012 09:37, Andreas Schik wrote:
>> Hi,
>> I was trying to install a default OpenURL service on my system and came
>> across the following: while my service was being called it could not
>> read the URL from the pasteboard. The pasteboard passed to my service
>> reported an empty list of types, while there should of course be data of
>> type NSURLPboardType.
>> Digging around I found the above mentioned method declared in
>> NSPasteboard.m. This is called from somewhere in NSWorkspace to pass the
>> URL to the service. While the URL as such gets written to the
>> pasteboard, the method IMHO forgets to declare the proper type. Changing
>> the method as follows remedied my problem:
>>
>> - (void) writeToPasteboard: (NSPasteboard *)pasteBoard
>> {
>> [pasteBoard declareTypes: [NSArray arrayWithObjects:
>> NSURLPboardType,nil]
>> owner: nil];
>> [pasteBoard setString: [self absoluteString]
>> forType: NSURLPboardType];
>> }
>
> Committed. Thank you for the analysis and the patch.
But it's not how OS X works. Quoting the NSURL Additions documentation
https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSURL_AppKitAdditions/Reference/Reference.html%23//apple_ref/doc/uid/TP40004147
it says "You must declare an NSURLPboardType data type for pasteboard before
invoking this method; otherwise it returns without doing anything." So, the
correct fix is adding
[pb declareTypes: [NSArray arrayWithObject: NSURLPboardType] owner: nil];
to NSWorkspace -openURL:
Wolfgang