From 45747152aae9e6bdcb103b0612a57fef118d3184 Mon Sep 17 00:00:00 2001 From: Jack Jansen Date: Wed, 27 Feb 2002 23:09:08 +0000 Subject: Backport of 1.5 thru 1.7 (of _CarbonEvtmodule.c): - Fixed TrackMouseRegion() argument: ioWasInRgn is an in/out parameter. - Today's Carbon Toolbox addition: CarbonEvt.TrackMouseLocation() and friends. - fixed SetEventParameter() signature: removed unneccesary length arg. --- Mac/Modules/carbonevt/CarbonEvtscan.py | 15 +++-- Mac/Modules/carbonevt/CarbonEvtsupport.py | 11 ++++ Mac/Modules/carbonevt/_CarbonEvtmodule.c | 95 ++++++++++++++++++++++++++++--- 3 files changed, 108 insertions(+), 13 deletions(-) diff --git a/Mac/Modules/carbonevt/CarbonEvtscan.py b/Mac/Modules/carbonevt/CarbonEvtscan.py index e93baf3..0cc048a 100644 --- a/Mac/Modules/carbonevt/CarbonEvtscan.py +++ b/Mac/Modules/carbonevt/CarbonEvtscan.py @@ -63,9 +63,9 @@ class CarbonEvents_Scanner(Scanner_OSX): return [ "sHandler", "MacCreateEvent", - "TrackMouseLocationWithOptions", - "TrackMouseLocation", - "TrackMouseRegion", +# "TrackMouseLocationWithOptions", +# "TrackMouseLocation", +# "TrackMouseRegion", "RegisterToolboxObjectClass", "UnregisterToolboxObjectClass", "ProcessHICommand", @@ -107,7 +107,12 @@ class CarbonEvents_Scanner(Scanner_OSX): # ] def makerepairinstructions(self): - return [] - + return [ + ([("UInt32", 'inSize', "InMode"), ("void_ptr", 'inDataPtr', "InMode")], + [("MyInBuffer", 'inDataPtr', "InMode")]), + ([("Boolean", 'ioWasInRgn', "OutMode")], + [("Boolean", 'ioWasInRgn', "InOutMode")]), + ] + if __name__ == "__main__": main() diff --git a/Mac/Modules/carbonevt/CarbonEvtsupport.py b/Mac/Modules/carbonevt/CarbonEvtsupport.py index 0ce2af8..cbaca2a 100644 --- a/Mac/Modules/carbonevt/CarbonEvtsupport.py +++ b/Mac/Modules/carbonevt/CarbonEvtsupport.py @@ -34,6 +34,12 @@ EventTypeSpec_ptr = OpaqueType("EventTypeSpec", "EventTypeSpec") void_ptr = stringptr # here are some types that are really other types +class MyVarInputBufferType(VarInputBufferType): + def passInput(self, name): + return "%s__len__, %s__in__" % (name, name) + +MyInBuffer = MyVarInputBufferType('char', 'long', 'l') # (buf, len) + EventTime = double EventTimeout = EventTime EventTimerInterval = EventTime @@ -62,6 +68,11 @@ class EventHandlerRefMethod(OSErrMethodGenerator): OutRbrace() +RgnHandle = OpaqueByValueType("RgnHandle", "ResObj") +GrafPtr = OpaqueByValueType("GrafPtr", "GrafObj") +MouseTrackingResult = UInt16 + + includestuff = r""" #ifdef WITHOUT_FRAMEWORKS #include diff --git a/Mac/Modules/carbonevt/_CarbonEvtmodule.c b/Mac/Modules/carbonevt/_CarbonEvtmodule.c index eef1e3c..dca9d33 100755 --- a/Mac/Modules/carbonevt/_CarbonEvtmodule.c +++ b/Mac/Modules/carbonevt/_CarbonEvtmodule.c @@ -215,19 +215,19 @@ static PyObject *EventRef_SetEventParameter(EventRefObject *_self, PyObject *_ar OSStatus _err; OSType inName; OSType inType; - UInt32 inSize; - char* inDataPtr; - if (!PyArg_ParseTuple(_args, "O&O&ls", + char *inDataPtr__in__; + long inDataPtr__len__; + int inDataPtr__in_len__; + if (!PyArg_ParseTuple(_args, "O&O&s#", PyMac_GetOSType, &inName, PyMac_GetOSType, &inType, - &inSize, - &inDataPtr)) + &inDataPtr__in__, &inDataPtr__in_len__)) return NULL; + inDataPtr__len__ = inDataPtr__in_len__; _err = SetEventParameter(_self->ob_itself, inName, inType, - inSize, - inDataPtr); + inDataPtr__len__, inDataPtr__in__); if (_err != noErr) return PyMac_Error(_err); Py_INCREF(Py_None); _res = Py_None; @@ -386,7 +386,7 @@ static PyMethodDef EventRef_methods[] = { {"ReleaseEvent", (PyCFunction)EventRef_ReleaseEvent, 1, "() -> None"}, {"SetEventParameter", (PyCFunction)EventRef_SetEventParameter, 1, - "(OSType inName, OSType inType, UInt32 inSize, char* inDataPtr) -> None"}, + "(OSType inName, OSType inType, Buffer inDataPtr) -> None"}, {"GetEventClass", (PyCFunction)EventRef_GetEventClass, 1, "() -> (UInt32 _rv)"}, {"GetEventKind", (PyCFunction)EventRef_GetEventKind, 1, @@ -1390,6 +1390,79 @@ static PyObject *CarbonEvents_GetCurrentEventTime(PyObject *_self, PyObject *_ar return _res; } +static PyObject *CarbonEvents_TrackMouseLocation(PyObject *_self, PyObject *_args) +{ + PyObject *_res = NULL; + OSStatus _err; + GrafPtr inPort; + Point outPt; + UInt16 outResult; + if (!PyArg_ParseTuple(_args, "O&", + GrafObj_Convert, &inPort)) + return NULL; + _err = TrackMouseLocation(inPort, + &outPt, + &outResult); + if (_err != noErr) return PyMac_Error(_err); + _res = Py_BuildValue("O&H", + PyMac_BuildPoint, outPt, + outResult); + return _res; +} + +static PyObject *CarbonEvents_TrackMouseLocationWithOptions(PyObject *_self, PyObject *_args) +{ + PyObject *_res = NULL; + OSStatus _err; + GrafPtr inPort; + OptionBits inOptions; + double inTimeout; + Point outPt; + UInt32 outModifiers; + UInt16 outResult; + if (!PyArg_ParseTuple(_args, "O&ld", + GrafObj_Convert, &inPort, + &inOptions, + &inTimeout)) + return NULL; + _err = TrackMouseLocationWithOptions(inPort, + inOptions, + inTimeout, + &outPt, + &outModifiers, + &outResult); + if (_err != noErr) return PyMac_Error(_err); + _res = Py_BuildValue("O&lH", + PyMac_BuildPoint, outPt, + outModifiers, + outResult); + return _res; +} + +static PyObject *CarbonEvents_TrackMouseRegion(PyObject *_self, PyObject *_args) +{ + PyObject *_res = NULL; + OSStatus _err; + GrafPtr inPort; + RgnHandle inRegion; + Boolean ioWasInRgn; + UInt16 outResult; + if (!PyArg_ParseTuple(_args, "O&O&b", + GrafObj_Convert, &inPort, + ResObj_Convert, &inRegion, + &ioWasInRgn)) + return NULL; + _err = TrackMouseRegion(inPort, + inRegion, + &ioWasInRgn, + &outResult); + if (_err != noErr) return PyMac_Error(_err); + _res = Py_BuildValue("bH", + ioWasInRgn, + outResult); + return _res; +} + static PyObject *CarbonEvents_GetLastUserEventTime(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -1718,6 +1791,12 @@ static PyMethodDef CarbonEvents_methods[] = { "() -> (EventQueueRef _rv)"}, {"GetCurrentEventTime", (PyCFunction)CarbonEvents_GetCurrentEventTime, 1, "() -> (double _rv)"}, + {"TrackMouseLocation", (PyCFunction)CarbonEvents_TrackMouseLocation, 1, + "(GrafPtr inPort) -> (Point outPt, UInt16 outResult)"}, + {"TrackMouseLocationWithOptions", (PyCFunction)CarbonEvents_TrackMouseLocationWithOptions, 1, + "(GrafPtr inPort, OptionBits inOptions, double inTimeout) -> (Point outPt, UInt32 outModifiers, UInt16 outResult)"}, + {"TrackMouseRegion", (PyCFunction)CarbonEvents_TrackMouseRegion, 1, + "(GrafPtr inPort, RgnHandle inRegion, Boolean ioWasInRgn) -> (Boolean ioWasInRgn, UInt16 outResult)"}, {"GetLastUserEventTime", (PyCFunction)CarbonEvents_GetLastUserEventTime, 1, "() -> (double _rv)"}, {"GetWindowEventTarget", (PyCFunction)CarbonEvents_GetWindowEventTarget, 1, -- cgit v0.12