[Python-checkins] CVS: python/dist/src/Mac/Modules/carbonevt CarbonEvtscan.py,1.3,1.3.2.1 CarbonEvtsupport.py,1.6,1.6.2.1 _CarbonEvtmodule.c,1.3,1.3.2.1

Jack Jansen jackjansen@users.sourceforge.net
Wed, 19 Dec 2001 07:10:46 -0800


Update of /cvsroot/python/python/dist/src/Mac/Modules/carbonevt
In directory usw-pr-cvs1:/tmp/cvs-serv12554/Modules/carbonevt

Modified Files:
      Tag: r22rc1-branch
	CarbonEvtscan.py CarbonEvtsupport.py _CarbonEvtmodule.c 
Log Message:
Merged Mac subtree into the 22c1 branch.


Index: CarbonEvtscan.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Mac/Modules/carbonevt/CarbonEvtscan.py,v
retrieving revision 1.3
retrieving revision 1.3.2.1
diff -C2 -d -r1.3 -r1.3.2.1
*** CarbonEvtscan.py	2001/12/12 20:48:53	1.3
--- CarbonEvtscan.py	2001/12/19 15:10:13	1.3.2.1
***************
*** 42,52 ****
  		if arglist:
  			t, n, m = arglist[0]
- 			print "*********", t,
  			if t in RefObjectTypes and m == "InMode":
! 				print "method"
! 				classname = "CarbonEventsMethod"
  				listname = t + "methods"
! 			else:
! 				print "not method"
  		return classname, listname
  
--- 42,53 ----
  		if arglist:
  			t, n, m = arglist[0]
  			if t in RefObjectTypes and m == "InMode":
! 				if t == "EventHandlerRef":
! 					classname = "EventHandlerRefMethod"
! 				else:
! 					classname = "CarbonEventsMethod"
  				listname = t + "methods"
! 			#else:
! 			#	print "not method"
  		return classname, listname
  
***************
*** 83,86 ****
--- 84,88 ----
  			# Wrote by hand
  			"InstallEventHandler",
+ 			"RemoveEventHandler",
  			"RunApplicationEventLoop",
  						

Index: CarbonEvtsupport.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Mac/Modules/carbonevt/CarbonEvtsupport.py,v
retrieving revision 1.6
retrieving revision 1.6.2.1
diff -C2 -d -r1.6 -r1.6.2.1
*** CarbonEvtsupport.py	2001/12/12 21:48:00	1.6
--- CarbonEvtsupport.py	2001/12/19 15:10:13	1.6.2.1
***************
*** 12,15 ****
--- 12,16 ----
  	exec execstr
  
+ 
  if 0:
  	# these types will have no methods and will merely be opaque blobs
***************
*** 54,57 ****
--- 55,66 ----
  CarbonEventsMethod = OSErrMethodGenerator
  
+ class EventHandlerRefMethod(OSErrMethodGenerator):
+ 	def precheck(self):
+ 		OutLbrace('if (_self->ob_itself == NULL)')
+ 		Output('PyErr_SetString(CarbonEvents_Error, "Handler has been removed");')
+ 		Output('return NULL;')
+ 		OutRbrace()
+ 
+ 
  includestuff = r"""
  #ifdef WITHOUT_FRAMEWORKS
***************
*** 97,101 ****
  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;
***************
*** 156,160 ****
  #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");
***************
*** 189,201 ****
  module = MacModule('_CarbonEvt', 'CarbonEvents', includestuff, finalstuff, initstuff)
  
- #class CFReleaserObj(GlobalObjectDefinition):
- #	def outputFreeIt(self, name):
- #		Output("CFRelease(%s);" % name)
  
  for typ in RefObjectTypes:
! 	execstr = typ + 'object = GlobalObjectDefinition(typ)'
! 	exec execstr
  	module.addobject(eval(typ + 'object'))
  
  functions = []
  for typ in RefObjectTypes: ## go thru all ObjectTypes as defined in CarbonEventsscan.py
--- 202,230 ----
  module = MacModule('_CarbonEvt', 'CarbonEvents', includestuff, finalstuff, initstuff)
  
  
+ 
+ 
+ class EventHandlerRefObjectDefinition(GlobalObjectDefinition):
+ 	def outputStructMembers(self):
+ 		Output("%s ob_itself;", self.itselftype)
+ 		Output("PyObject *ob_callback;")
+ 	def outputInitStructMembers(self):
+ 		Output("it->ob_itself = %sitself;", self.argref)
+ 		Output("it->ob_callback = NULL;")
+ 	def outputFreeIt(self, name):
+ 		OutLbrace("if (self->ob_itself != NULL)")
+ 		Output("RemoveEventHandler(self->ob_itself);")
+ 		Output("Py_DECREF(self->ob_callback);")
+ 		OutRbrace()
+ 
  for typ in RefObjectTypes:
! 	if typ == 'EventHandlerRef':
! 		EventHandlerRefobject = EventHandlerRefObjectDefinition('EventHandlerRef')
! 	else:
! 		execstr = typ + 'object = GlobalObjectDefinition(typ)'
! 		exec execstr
  	module.addobject(eval(typ + 'object'))
  
+ 
  functions = []
  for typ in RefObjectTypes: ## go thru all ObjectTypes as defined in CarbonEventsscan.py
***************
*** 206,209 ****
--- 235,240 ----
  execfile('CarbonEventsgen.py')
  
+ 
+ 
  for f in functions: module.add(f)	# add all the functions carboneventsgen put in the list
  
***************
*** 213,216 ****
--- 244,270 ----
  	for m in methods: obj.add(m)	## add each method in the list to the object
  
+ 
+ removeeventhandler = """
+ OSStatus _err;
+ if (_self->ob_itself == NULL) {
+ 	PyErr_SetString(CarbonEvents_Error, "Handler has been removed");
+ 	return NULL;
+ }
+ if (!PyArg_ParseTuple(_args, ""))
+ 	return NULL;
+ _err = RemoveEventHandler(_self->ob_itself);
+ if (_err != noErr) return PyMac_Error(_err);
+ _self->ob_itself = NULL;
+ Py_DECREF(_self->ob_callback);
+ _self->ob_callback = NULL;
+ Py_INCREF(Py_None);
+ _res = Py_None;
+ return _res;"""
+ 
+ f = ManualGenerator("RemoveEventHandler", removeeventhandler);
+ f.docstring = lambda: "() -> None"
+ EventHandlerRefobject.add(f)
+ 
+ 
  installeventhandler = """
  EventTypeSpec inSpec;
***************
*** 225,233 ****
  if (_err != noErr) return PyMac_Error(_err);
  
! return Py_BuildValue("O&", EventHandlerRef_New, outRef);"""
  
  f = ManualGenerator("InstallEventHandler", installeventhandler);
! f.docstring = lambda: "(EventTargetRef inTarget, EventTypeSpec inSpec, Method callback) -> (EventHandlerRef outRef)"
  EventTargetRefobject.add(f)
  
  runappeventloop = """
--- 279,328 ----
  if (_err != noErr) return PyMac_Error(_err);
  
! _res = EventHandlerRef_New(outRef);
! if (_res != NULL) {
! 	((EventHandlerRefObject*)_res)->ob_callback = callback;
! 	Py_INCREF(callback);
! }
! return _res;"""
  
  f = ManualGenerator("InstallEventHandler", installeventhandler);
! 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 = """

Index: _CarbonEvtmodule.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Mac/Modules/carbonevt/_CarbonEvtmodule.c,v
retrieving revision 1.3
retrieving revision 1.3.2.1
diff -C2 -d -r1.3 -r1.3.2.1
*** _CarbonEvtmodule.c	2001/12/12 21:48:00	1.3
--- _CarbonEvtmodule.c	2001/12/19 15:10:13	1.3.2.1
***************
*** 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}
  };
***************
*** 800,803 ****
--- 840,844 ----
  	PyObject_HEAD
  	EventHandlerRef ob_itself;
+ 	PyObject *ob_callback;
  } EventHandlerRefObject;
  
***************
*** 808,811 ****
--- 849,853 ----
  	if (it == NULL) return NULL;
  	it->ob_itself = itself;
+ 	it->ob_callback = NULL;
  	return (PyObject *)it;
  }
***************
*** 823,843 ****
  static void EventHandlerRef_dealloc(EventHandlerRefObject *self)
  {
! 	/* Cleanup of self->ob_itself goes here */
  	PyMem_DEL(self);
  }
  
- static PyObject *EventHandlerRef_RemoveEventHandler(EventHandlerRefObject *_self, PyObject *_args)
- {
- 	PyObject *_res = NULL;
- 	OSStatus _err;
- 	if (!PyArg_ParseTuple(_args, ""))
- 		return NULL;
- 	_err = RemoveEventHandler(_self->ob_itself);
- 	if (_err != noErr) return PyMac_Error(_err);
- 	Py_INCREF(Py_None);
- 	_res = Py_None;
- 	return _res;
- }
- 
  static PyObject *EventHandlerRef_AddEventTypesToHandler(EventHandlerRefObject *_self, PyObject *_args)
  {
--- 865,875 ----
  static void EventHandlerRef_dealloc(EventHandlerRefObject *self)
  {
! 	if (self->ob_itself != NULL) {
! 		RemoveEventHandler(self->ob_itself);
! 		Py_DECREF(self->ob_callback);
! 	}
  	PyMem_DEL(self);
  }
  
  static PyObject *EventHandlerRef_AddEventTypesToHandler(EventHandlerRefObject *_self, PyObject *_args)
  {
***************
*** 846,849 ****
--- 878,885 ----
  	UInt32 inNumTypes;
  	EventTypeSpec inList;
+ 	if (_self->ob_itself == NULL) {
+ 		PyErr_SetString(CarbonEvents_Error, "Handler has been removed");
+ 		return NULL;
+ 	}
  	if (!PyArg_ParseTuple(_args, "lO&",
  	                      &inNumTypes,
***************
*** 865,868 ****
--- 901,908 ----
  	UInt32 inNumTypes;
  	EventTypeSpec inList;
+ 	if (_self->ob_itself == NULL) {
+ 		PyErr_SetString(CarbonEvents_Error, "Handler has been removed");
+ 		return NULL;
+ 	}
  	if (!PyArg_ParseTuple(_args, "lO&",
  	                      &inNumTypes,
***************
*** 878,888 ****
  }
  
  static PyMethodDef EventHandlerRef_methods[] = {
- 	{"RemoveEventHandler", (PyCFunction)EventHandlerRef_RemoveEventHandler, 1,
- 	 "() -> None"},
  	{"AddEventTypesToHandler", (PyCFunction)EventHandlerRef_AddEventTypesToHandler, 1,
  	 "(UInt32 inNumTypes, EventTypeSpec inList) -> None"},
  	{"RemoveEventTypesFromHandler", (PyCFunction)EventHandlerRef_RemoveEventTypesFromHandler, 1,
  	 "(UInt32 inNumTypes, EventTypeSpec inList) -> None"},
  	{NULL, NULL, 0}
  };
--- 918,949 ----
  }
  
+ static PyObject *EventHandlerRef_RemoveEventHandler(EventHandlerRefObject *_self, PyObject *_args)
+ {
+ 	PyObject *_res = NULL;
+ 
+ 	OSStatus _err;
+ 	if (_self->ob_itself == NULL) {
+ 		PyErr_SetString(CarbonEvents_Error, "Handler has been removed");
+ 		return NULL;
+ 	}
+ 	if (!PyArg_ParseTuple(_args, ""))
+ 		return NULL;
+ 	_err = RemoveEventHandler(_self->ob_itself);
+ 	if (_err != noErr) return PyMac_Error(_err);
+ 	_self->ob_itself = NULL;
+ 	Py_DECREF(_self->ob_callback);
+ 	_self->ob_callback = NULL;
+ 	Py_INCREF(Py_None);
+ 	_res = Py_None;
+ 	return _res;
+ }
+ 
  static PyMethodDef EventHandlerRef_methods[] = {
  	{"AddEventTypesToHandler", (PyCFunction)EventHandlerRef_AddEventTypesToHandler, 1,
  	 "(UInt32 inNumTypes, EventTypeSpec inList) -> None"},
  	{"RemoveEventTypesFromHandler", (PyCFunction)EventHandlerRef_RemoveEventTypesFromHandler, 1,
  	 "(UInt32 inNumTypes, EventTypeSpec inList) -> None"},
+ 	{"RemoveEventHandler", (PyCFunction)EventHandlerRef_RemoveEventHandler, 1,
+ 	 "() -> None"},
  	{NULL, NULL, 0}
  };
***************
*** 1084,1088 ****
  	if (_err != noErr) return PyMac_Error(_err);
  
! 	return Py_BuildValue("O&", EventHandlerRef_New, outRef);
  }
  
--- 1145,1154 ----
  	if (_err != noErr) return PyMac_Error(_err);
  
! 	_res = EventHandlerRef_New(outRef);
! 	if (_res != NULL) {
! 		((EventHandlerRefObject*)_res)->ob_callback = callback;
! 		Py_INCREF(callback);
! 	}
! 	return _res;
  }
  
***************
*** 1091,1095 ****
  	 "() -> None"},
  	{"InstallEventHandler", (PyCFunction)EventTargetRef_InstallEventHandler, 1,
! 	 "(EventTargetRef inTarget, EventTypeSpec inSpec, Method callback) -> (EventHandlerRef outRef)"},
  	{NULL, NULL, 0}
  };
--- 1157,1161 ----
  	 "() -> None"},
  	{"InstallEventHandler", (PyCFunction)EventTargetRef_InstallEventHandler, 1,
! 	 "(EventTypeSpec inSpec, Method callback) -> (EventHandlerRef outRef)"},
  	{NULL, NULL, 0}
  };