[python-nl] PyObjC Segfault

Ronald Oussoren ronaldoussoren at mac.com
Sun Feb 28 21:28:22 CET 2010


On 28 Feb, 2010, at 15:47, Pepijn de Vos wrote:

> Dank voor de reactie.
> 
> Nadat ik nog wat rond heb gekeken lijk het er op dat ik zowel CFMachPortCreateRunLoopSource als CFRunLoopGetCurrent nodig hebt, klopt dit?

Als je de machport in een runloop wilt hangen heb je beiden nodig. CFRunLoopGetCurrent geeft je een referentie naar de huidige runloop, CFMachPortCreate... maakt een object dat in een runloop gehangen kan worden en events genereert als er iets te doen is.

> 
> Het volledige script is helaas niet veel meer dan wat ik al gepost heb, is dit misschien gewoon een bug in PyObjC?
> 
> from Quartz import *
> 
> def MyFunction(p, t, e):
> 	print e
> 
> CGEventTapCreate(kCGHIDEventTap, kCGTailAppendEventTap, kCGEventTapOptionListenOnly, kCGEventLeftMouseDown, MyFunction)

Vreemd. Het werkt wel op mijn machine, met een extra argument achter MyFunction:

tap = CGEventTapCreate(kCGHIDEventTap, kCGTailAppendEventTap, kCGEventTapOptionListenOnly, kCGEventLeftMouseDown, MyFunction, None)

Welke versies van OSX, python en pyobjc gebruik je?

Ronald
> 
> Groeten,
> Pepijn
> 
> On Feb 28, 2010, at 1:23 PM, Ronald Oussoren wrote:
> 
>> 
>> On 25 Feb, 2010, at 18:42, Pepijn de Vos wrote:
>> 
>>> Hoi allemaal,
>>> 
>>> Ik ben momenteel druk bezig met een event systeem toe te voegen aan PyMouse, mijn muis-besturings module.
>>> 
>>> Nu heb ik uitgevonden dat er in ObjC een event systeem zit, maar ik kan er maar niet achter komen hoe het precies werkt. Weet iemand hier daar iets over?
>>> 
>>> Om te beginnen importeer ik de hele zooi:
>>> from Quartz import *
>>> 
>>> Daarna heb ik geprobeerd een event tap te maken door middel van deze pagina:
>>> http://developer.apple.com/mac/library/documentation/Carbon/Reference/QuartzEventServicesRef/Reference/reference.html#//apple_ref/c/func/CGEventTapCreate
>>> 
>>> Ik kwam tot deze code:
>>> CGEventTapCreate(kCGHIDEventTap, kCGTailAppendEventTap, kCGEventTapOptionListenOnly, kCGEventLeftMouseDown, MyFunction)
>>> 
>>> Maar dat geeft direct een segfault.
>>> Ik heb wel uitgevonden dat je de event eerst aan een eventloop moet toevoegen, maar waar ik die vandaan haal...
>>> CFMachPortCreateRunLoopSource(None, CFMachPortRef, 0) -> None
>>> CFRunLoopGetCurrent() -> heleboel output
>>> 
>>> Ik weet ook niet of dat iets te maken heeft met de segfault.
>> 
>> CFRunLoopGetCurrent is de juiste manier.
>> 
>> Ik heb geen idee waar de crash vandaan komt, kan je een volledig script posten waarmee je het probleem laat zien?
>> 
>> Ronald
>>> 
>>> Bij voorbaat dank.
>>> 
>>> Pepijn de Vos
>>> _______________________________________________
>>> Python-nl mailing list
>>> Python-nl at python.org
>>> http://mail.python.org/mailman/listinfo/python-nl
>> 
>> _______________________________________________
>> Python-nl mailing list
>> Python-nl at python.org
>> http://mail.python.org/mailman/listinfo/python-nl
> 
> _______________________________________________
> Python-nl mailing list
> Python-nl at python.org
> http://mail.python.org/mailman/listinfo/python-nl

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-nl/attachments/20100228/f1a6d2f7/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 3567 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/python-nl/attachments/20100228/f1a6d2f7/attachment-0001.bin>


More information about the Python-nl mailing list