[Pythonmac-SIG] noob question: handling protocols and files
Ronald Oussoren
ronaldoussoren at mac.com
Sun Aug 7 11:58:42 CEST 2005
On 6-aug-2005, at 19:46, Kevin Dangoor wrote:
> On 8/5/05, Bob Ippolito <bob at redivi.com> wrote:
>
>> You may have to do that with a get URL apple event handler, see here:
>> http://developer.apple.com/documentation/Cocoa/Conceptual/
>> Scriptability/Concepts/ScriptabilityOverview.html
>> (you shouldn't need any Carbon)
>>
>
> Before I go chasing around the Apple docs a bit more to see if I'm
> registering the *correct* event handler, can you confirm if I'm doing
> the right thing here?
>
> The first questionable thing is that the constant for the type of
> event is defined in the Apple Events docs (and in the AppleEvents
> python module) as 'gurl'. However, the Apple Event Manager method call
> is asking for an unsigned long. Should I convert "gurl" to
> 1735750252L?
The 'gurl' value is an long integer value, you should indeed convert
it to 1735750252L. The Carbon modules in MacPython know about 4
character codes (such as 'gurl') and accept both integers in 4-byte
strings in APIs that use 4 character codes. PyObjC doesn't implement
this convienence conversion, basically because it doesn't know which
APIs might accept 4 character codes.
I'd do the conversion using struct.unpack: gurl_code = struct.unpack
('l', 'gurl')[0]
>
> Here's the objC example from Apple's doc:
> [appleEventManager setEventHandler:self
> andSelector:@selector(handleGetURLEvent:withReplyEvent:)
> forEventClass:kAEInternetSuite andEventID:kAEISGetURL];
>
> Here's my translation to Python:
> sel = objc.selector
> (MacController.handleGetURLEvent_withReplyEvent_,
> signature="vO:O:")
>
> aem.setEventHandler_andSelector_forEventClass_andEventID_(self,
> sel,
> 1735750252L, 1735750252L)
That's very wrong. You shouldn't call objc.selector unless you're
defining a new method (in a class definition on the argument for
objc.classAddMethods). The call to objc.selector should be in the
class definition of MacController.
I don't think this will help, if the method really has an object and
selector argument you're program would have crashed when aem tried to
call your method. A quick glance at the AppleEventManager docs tells
my that the call to objc.selector is not needed, the signature
argument is just plain wrong (you signature is for a method that
returns void and has two arguments: and object and a SEL (method name)).
One other thing: according to LaunchServicesConcepts.pdf (link below)
the even code is 'GURL' (upper-case), which is different from 'gurl'.
http://developer.apple.com/documentation/Carbon/Conceptual/
LaunchServicesConcepts/LaunchServicesConcepts.pdf
>
> This is in my application delegate's applicationWillFinishLaunching_
> method, which is where Apple recommended doing this. I can see that
> this is getting called, but my handler itself doesn't get called.
>
> I'm testing by just doing "open <URL with my protocol>" at the
> commandline, which does bring my app to the front but does not call my
> handler method. Assuming all of the above is kosher, I'll do some more
> digging around to make sure that this is, in fact, the specific
> handler I want.
Could you post your code? I've tried to avoid AppleScript related
code upto know and can't even manage to bring my application to the
front :-)
>
> Thanks for your help so far!
> Kevin
> _______________________________________________
> Pythonmac-SIG maillist - Pythonmac-SIG at python.org
> http://mail.python.org/mailman/listinfo/pythonmac-sig
>
More information about the Pythonmac-SIG
mailing list