[Python-checkins] CVS: python/dist/src/Mac/Modules/carbonevt _CarbonEvtmodule.c,1.4,1.5 CarbonEvtsupport.py,1.7,1.8

Just van Rossum jvr@users.sourceforge.net
2001年12月18日 04:35:59 -0800


Update of /cvsroot/python/python/dist/src/Mac/Modules/carbonevt
In directory usw-pr-cvs1:/tmp/cvs-serv1845
Modified Files:
	_CarbonEvtmodule.c CarbonEvtsupport.py 
Log Message:
Patch #494553 by Donovan Preston: initial implementation
for GetEventParameter().
Index: _CarbonEvtmodule.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Mac/Modules/carbonevt/_CarbonEvtmodule.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** _CarbonEvtmodule.c	2001年12月14日 23:16:04	1.4
--- _CarbonEvtmodule.c	2001年12月18日 12:35:57	1.5
***************
*** 48,52 ****
 EventTypeSpec_Convert(PyObject *v, EventTypeSpec *out)
 {
! 	if (PyArg_Parse(v, "(O&l)", PyMac_GetOSType, &(out->eventClass), &(out->eventKind)))
 		return 1;
 	return NULL;
--- 48,54 ----
 EventTypeSpec_Convert(PyObject *v, EventTypeSpec *out)
 {
! 	if (PyArg_Parse(v, "(O&l)",
! 	 PyMac_GetOSType, &(out->eventClass),
! 	 &(out->eventKind)))
 		return 1;
 	return NULL;
***************
*** 107,111 ****
 #endif /* USE_MAC_MP_MULTITHREADING */
 
! 	retValue = PyObject_CallFunction((PyObject *)outPyObject, "O&O&", EventHandlerCallRef_New, handlerRef, EventRef_New, event);
 	if (retValue == NULL) {
 		PySys_WriteStderr("Error in event handler callback:\n");
--- 109,115 ----
 #endif /* USE_MAC_MP_MULTITHREADING */
 
! 	retValue = PyObject_CallFunction((PyObject *)outPyObject, "O&O&",
! 	 EventHandlerCallRef_New, handlerRef,
! 	 EventRef_New, event);
 	if (retValue == NULL) {
 		PySys_WriteStderr("Error in event handler callback:\n");
***************
*** 341,344 ****
--- 345,382 ----
 }
 
+ static PyObject *EventRef_GetEventParameter(EventRefObject *_self, PyObject *_args)
+ {
+ 	PyObject *_res = NULL;
+ 
+ 	UInt32 bufferSize;
+ 	EventParamName inName;
+ 	EventParamType inType;
+ 	OSErr _err;
+ 	void * buffer;
+ 
+ 	if (!PyArg_ParseTuple(_args, "O&O&", PyMac_GetOSType, &inName, PyMac_GetOSType, &inType))
+ 	 return NULL;
+ 
+ 	/* Figure out the size by passing a null buffer to GetEventParameter */
+ 	_err = GetEventParameter(_self->ob_itself, inName, inType, NULL, 0, &bufferSize, NULL);
+ 
+ 	if (_err != noErr)
+ 	 return PyMac_Error(_err);
+ 	buffer = PyMem_NEW(char, bufferSize);
+ 	if (buffer == NULL)
+ 	 return PyErr_NoMemory();
+ 
+ 	_err = GetEventParameter(_self->ob_itself, inName, inType, NULL, bufferSize, NULL, buffer);
+ 
+ 	if (_err != noErr) {
+ 	 PyMem_DEL(buffer);
+ 	 return PyMac_Error(_err);
+ 	}
+ 	_res = Py_BuildValue("s#", buffer, bufferSize);
+ 	PyMem_DEL(buffer);
+ 	return _res;
+ 
+ }
+ 
 static PyMethodDef EventRef_methods[] = {
 	{"RetainEvent", (PyCFunction)EventRef_RetainEvent, 1,
***************
*** 366,369 ****
--- 404,409 ----
 	{"SendEventToEventTarget", (PyCFunction)EventRef_SendEventToEventTarget, 1,
 	 "(EventTargetRef inTarget) -> None"},
+ 	{"GetEventParameter", (PyCFunction)EventRef_GetEventParameter, 1,
+ 	 "(EventParamName eventName, EventParamType eventType) -> (String eventParamData)"},
 	{NULL, NULL, 0}
 };
Index: CarbonEvtsupport.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Mac/Modules/carbonevt/CarbonEvtsupport.py,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -d -r1.7 -r1.8
*** CarbonEvtsupport.py	2001年12月14日 23:16:04	1.7
--- CarbonEvtsupport.py	2001年12月18日 12:35:57	1.8
***************
*** 106,110 ****
 EventTypeSpec_Convert(PyObject *v, EventTypeSpec *out)
 {
! 	if (PyArg_Parse(v, "(O&l)", PyMac_GetOSType, &(out->eventClass), &(out->eventKind)))
 		return 1;
 	return NULL;
--- 106,112 ----
 EventTypeSpec_Convert(PyObject *v, EventTypeSpec *out)
 {
! 	if (PyArg_Parse(v, "(O&l)",
! 	 PyMac_GetOSType, &(out->eventClass),
! 	 &(out->eventKind)))
 		return 1;
 	return NULL;
***************
*** 165,169 ****
 #endif /* USE_MAC_MP_MULTITHREADING */
 
! 	retValue = PyObject_CallFunction((PyObject *)outPyObject, "O&O&", EventHandlerCallRef_New, handlerRef, EventRef_New, event);
 	if (retValue == NULL) {
 		PySys_WriteStderr("Error in event handler callback:\n");
--- 167,173 ----
 #endif /* USE_MAC_MP_MULTITHREADING */
 
! 	retValue = PyObject_CallFunction((PyObject *)outPyObject, "O&O&",
! 	 EventHandlerCallRef_New, handlerRef,
! 	 EventRef_New, event);
 	if (retValue == NULL) {
 		PySys_WriteStderr("Error in event handler callback:\n");
***************
*** 285,288 ****
--- 289,328 ----
 f.docstring = lambda: "(EventTypeSpec inSpec, Method callback) -> (EventHandlerRef outRef)"
 EventTargetRefobject.add(f)
+ 
+ # This may not be the best, but at least it lets you get the raw data back into python as a string. You'll have to cut it up yourself and parse the result.
+ 
+ geteventparameter = """
+ UInt32 bufferSize;
+ EventParamName inName;
+ EventParamType inType;
+ OSErr _err;
+ void * buffer;
+ 
+ if (!PyArg_ParseTuple(_args, "O&O&", PyMac_GetOSType, &inName, PyMac_GetOSType, &inType))
+ return NULL;
+ 
+ /* Figure out the size by passing a null buffer to GetEventParameter */
+ _err = GetEventParameter(_self->ob_itself, inName, inType, NULL, 0, &bufferSize, NULL);
+ 
+ if (_err != noErr)
+ return PyMac_Error(_err);
+ buffer = PyMem_NEW(char, bufferSize);
+ if (buffer == NULL)
+ return PyErr_NoMemory();
+ 
+ _err = GetEventParameter(_self->ob_itself, inName, inType, NULL, bufferSize, NULL, buffer);
+ 
+ if (_err != noErr) {
+ PyMem_DEL(buffer);
+ return PyMac_Error(_err);
+ }
+ _res = Py_BuildValue("s#", buffer, bufferSize);
+ PyMem_DEL(buffer);
+ return _res;
+ """
+ 
+ f = ManualGenerator("GetEventParameter", geteventparameter);
+ f.docstring = lambda: "(EventParamName eventName, EventParamType eventType) -> (String eventParamData)"
+ EventRefobject.add(f)
 
 runappeventloop = """

AltStyle によって変換されたページ (->オリジナル) /