Re: [Pyobjc-dev] Modify wrapper or loadBundleFunctions syntax
Brought to you by:
ronaldoussoren
From: Virgil D. <hs...@ha...> - 2010-04-12 18:44:21
|
On Mon, Apr 12, 2010 at 8:34 PM, Pepijn de Vos <pep...@gm...> wrote: > Thank you, that seemed to work. > > By the way, the bug is right there under your nose: > <arg type='{CGPoint=ff}' type64='{CGPoint=**ff**}' /> > Change the second ff into dd and it's done. > Should I submit a patch or bug report somewhere? > > Groeten, > Pepijn de Vos > -- > Sent from my iPod Shuffle > http://pepijndevos.nl > > On Apr 12, 2010, at 8:13 PM, Virgil Dupras wrote: > >> On Mon, Apr 12, 2010 at 7:44 PM, Pepijn de Vos <pep...@gm...> wrote: >>> Hi, >>> It's me again. >>> How can I change the wrapper for a function like CGEventCreateMouseEvent >>> from Quartz? >>> It seems like my CGPoint uses floats instead of doubles, which is wrong for >>> 64 bit, like in Snow Leopard. >>> Another option is going back to using objc and importing the function >>> manually. >>> The problem is that I don't know the syntax for loadBundleFunctions. >>> I managed to get CGPostMouseEvent working with this: v{CGPoint=dd} (instead >>> of ff) >>> What would I need to do to import CGEventCreateMouseEvent? >>> Groeten, >>> Pepijn de Vos >>> -- >>> Sent from my iPod Shuffle >>> http://pepijndevos.nl >>> On Apr 4, 2010, at 6:23 PM, Ratko Jagodic wrote: >>> >>> Hi Pepijn, >>> Sorry, but I haven't seen this before. It seemed to work for me. If you feel >>> adventurous, you could try investigating yourself in the PyObjC source. The >>> file is _callbacks.m where the link between C/Python is for events. >>> Sorry I couldn't be of more help. Maybe others on this list could provide >>> more info. >>> Good luck. >>> Ratko >>> >>> >>> On Sun, Apr 4, 2010 at 11:02 AM, Pepijn de Vos <pep...@gm...> >>> wrote: >>>> >>>> Hi, >>>> As you can see in the code below the returned value of the mouse event has >>>> an insane value. >>>> When I generate a click or move event the mouse jumps to the very corner >>>> of the screen. >>>> <NSPoint x=13510801139695616.0 y=6.953222975623699e-310> >>>> Could it be that integer and float conversions between C and Python are >>>> messed up somewhere? >>>> I tried to use a tuple, a NSPoint and a CGPoint, which made no difference >>>> at all. >>>> Just creating a CGPoint object without the event works fine though. >>>> Groeten, >>>> Pepijn de Vos >>>> -- >>>> Sent from my iPod Shuffle >>>> http://pepijndevos.nl >>>> On Apr 4, 2010, at 5:54 PM, Ratko Jagodic wrote: >>>> >>>> I ran across the same problem back in September and there were a few bugs >>>> in the C code. I reported the bugs and they were fixed so I guess the >>>> Macports version includes those fixes. Don't know about the version numbers. >>>> CGEventTapCreate should take 6 parameters, as it does in carbon. >>>> >>>> What do you mean by "breaks the location"? >>>> "When I run Python26 and PyObjC from Macports the event system works fine, >>>> but making an event breaks the location." >>>> >>>> >>>> Ratko >>>> >>>> >>>> On Sun, Apr 4, 2010 at 10:27 AM, Pepijn de Vos <pep...@gm...> >>>> wrote: >>>>> >>>>> Hi all, >>>>> >>>>> I finally managed to get listening to events working, the code is at >>>>> http://github.com/pepijndevos/PyMouse/blob/master/mac.py#L30 >>>>> I don't know what made the difference, but after a lot of trying it >>>>> suddenly worked. >>>>> >>>>> Now I have another strange issue. >>>>> When I run the default Python and PyObjC version that came with Mac OS X >>>>> 10.6, Python segfaults while creating an event tap. >>>>> When I run Python26 and PyObjC from Macports the event system works fine, >>>>> but making an event breaks the location. >>>>> >>>>> Stock Python: >>>>> >>>>>>>> from Quartz import * >>>>>>>> def test(*args): >>>>> ... print args >>>>> ... >>>>>>>> tap = CGEventTapCreate( >>>>> ... kCGSessionEventTap, >>>>> ... kCGHeadInsertEventTap, >>>>> ... kCGEventTapOptionDefault, >>>>> ... CGEventMaskBit(kCGEventMouseMoved) | >>>>> ... CGEventMaskBit(kCGEventLeftMouseDown) | >>>>> ... CGEventMaskBit(kCGEventLeftMouseUp) | >>>>> ... CGEventMaskBit(kCGEventRightMouseDown) | >>>>> ... CGEventMaskBit(kCGEventRightMouseUp) | >>>>> ... CGEventMaskBit(kCGEventOtherMouseDown) | >>>>> ... CGEventMaskBit(kCGEventOtherMouseUp), >>>>> ... test) >>>>> Segmentation fault >>>>> >>>>> Macports Python: >>>>> >>>>>>>> from Quartz import * >>>>>>>> event = CGEventCreateMouseEvent(None, 3, CGPoint(200, 200), 1) >>>>>>>> CGEventGetLocation(event) >>>>> <NSPoint x=13510801139695616.0 y=6.953222975623699e-310> >>>>> >>>>> Also the stock version of CGEventTapCreate needs 5 parameters while the >>>>> Macports version needs 6. >>>>> >>>>> Macports version of PyObjC is 2.2 >>>>> Included version should be 2.2b3 according to a blog I found. >>>>> >>>>> Groeten, >>>>> Pepijn de Vos >>>>> -- >>>>> Sent from my iPod Shuffle >>>>> http://pepijndevos.nl >>>>> >>>>> >>>>> >>>>> ------------------------------------------------------------------------------ >>>>> Download Intel® Parallel Studio Eval >>>>> Try the new software tools for yourself. Speed compiling, find bugs >>>>> proactively, and fine-tune applications for parallel performance. >>>>> See why Intel Parallel Studio got high marks during beta. >>>>> http://p.sf.net/sfu/intel-sw-dev >>>>> _______________________________________________ >>>>> Pyobjc-dev mailing list >>>>> Pyo...@li... >>>>> https://lists.sourceforge.net/lists/listinfo/pyobjc-dev >>>> >>>> >>> >>> >>> >>> ------------------------------------------------------------------------------ >>> Download Intel® Parallel Studio Eval >>> Try the new software tools for yourself. Speed compiling, find bugs >>> proactively, and fine-tune applications for parallel performance. >>> See why Intel Parallel Studio got high marks during beta. >>> http://p.sf.net/sfu/intel-sw-dev >>> _______________________________________________ >>> Pyobjc-dev mailing list >>> Pyo...@li... >>> https://lists.sourceforge.net/lists/listinfo/pyobjc-dev >>> >>> >> >> Maybe you can inspire yourself from the PyObjC.bridgeSupport file? The entry is: >> >> <function name='CGEventCreateMouseEvent'> >> <retval already_cfretained='true' type='^{__CGEvent=}' /> >> <arg type='^{__CGEventSource=}' /> >> <arg type='I' /> >> <arg type='{CGPoint=ff}' type64='{CGPoint=ff}' /> >> <arg type='I' /> >> </function> >> >> So maybe that your 64-bit signature would be >> "^{__CGEvent=}^{__CGEventSource=}I{CGPoint=dd}I" or something? >> >> -- >> Virgil Dupras > > I know it's a bug, I had started a fork of PyObjC with 64-bit fixes at http://bitbucket.org/hsoft/pyobjc/ , but I think that Ronald, in his recent commits, already fixed most of these bugs in the trunk. There's (or there were) a *lot* of 64-bit glitches all around. -- Virgil Dupras |