more think/mw changes
diff --git a/Mac/Modules/ae/AEmodule.c b/Mac/Modules/ae/AEmodule.c
index 544c4e2..f8c3c91 100644
--- a/Mac/Modules/ae/AEmodule.c
+++ b/Mac/Modules/ae/AEmodule.c
@@ -30,21 +30,45 @@
 extern PyObject *CtlObj_New(ControlHandle);
 extern int CtlObj_Convert(PyObject *, ControlHandle *);
 
+extern PyObject *WinObj_WhichWindow(WindowPtr);
+
 #include <AppleEvents.h>
 
 #ifdef THINK_C
+#define AEIdleProcPtr IdleProcPtr
 #define AEFilterProcPtr EventFilterProcPtr
 #define AEEventHandlerProcPtr EventHandlerProcPtr
 #endif
 
+#ifndef __MWERKS__
+/* Actually, this is "if not universal headers".
+** I'm trying to setup the code here so that is easily automated,
+** as follows:
+** - Use the UPP in the source
+** - for pre-universal headers, #define each UPP as the corresponding ProcPtr
+** - for each routine we pass we declare a upp_xxx that
+**   we initialize to the correct value in the init routine.
+*/
+#define AEIdleUPP AEIdleProcPtr
+#define AEFilterUPP AEFilterProcPtr
+#define AEEventHandlerUPP AEEventHandlerProcPtr
+#define NewAEIdleProc(x) (x)
+#define NewAEFilterProc(x) (x)
+#define NewAEEventHandlerProc(x) (x)
+#endif
+
 static pascal OSErr GenericEventHandler(); /* Forward */
 
+AEEventHandlerUPP upp_GenericEventHandler;
+
 static pascal Boolean AEIdleProc(EventRecord *theEvent, long *sleepTime, RgnHandle *mouseRgn)
 {
 	(void) PyMac_Idle();
 	return 0;
 }
 
+AEIdleUPP upp_AEIdleProc;
+
 static PyObject *AE_Error;
 
 /* ----------------------- Object type AEDesc ----------------------- */
@@ -733,8 +757,8 @@
 	              sendMode,
 	              sendPriority,
 	              timeOutInTicks,
-	              AEIdleProc,
-	              (AEFilterProcPtr)0);
+	              upp_AEIdleProc,
+	              (AEFilterUPP)0);
 	if (_err != noErr) return PyMac_Error(_err);
 	_res = Py_BuildValue("O&",
 	                     AEDesc_New, &reply);
@@ -778,7 +802,7 @@
 	PyObject *_res = NULL;
 	OSErr _err;
 	AppleEvent reply;
-	AEEventHandlerProcPtr dispatcher__proc__ = GenericEventHandler;
+	AEEventHandlerUPP dispatcher__proc__ = upp_GenericEventHandler;
 	PyObject *dispatcher;
 	if (!PyArg_ParseTuple(_args, "O&O",
 	                      AEDesc_Convert, &reply,
@@ -790,6 +814,7 @@
 	if (_err != noErr) return PyMac_Error(_err);
 	Py_INCREF(Py_None);
 	_res = Py_None;
+	Py_INCREF(dispatcher); /* XXX leak, but needed */
 	return _res;
 }
 
@@ -1103,7 +1128,7 @@
 		return NULL;
 	_err = AEInteractWithUser(timeOutInTicks,
 	                          (NMRecPtr)0,
-	                          AEIdleProc);
+	                          upp_AEIdleProc);
 	if (_err != noErr) return PyMac_Error(_err);
 	Py_INCREF(Py_None);
 	_res = Py_None;
@@ -1118,7 +1143,7 @@
 	OSErr _err;
 	AEEventClass theAEEventClass;
 	AEEventID theAEEventID;
-	AEEventHandlerProcPtr handler__proc__ = GenericEventHandler;
+	AEEventHandlerUPP handler__proc__ = upp_GenericEventHandler;
 	PyObject *handler;
 	if (!PyArg_ParseTuple(_args, "O&O&O",
 	                      PyMac_GetOSType, &theAEEventClass,
@@ -1132,6 +1157,7 @@
 	if (_err != noErr) return PyMac_Error(_err);
 	Py_INCREF(Py_None);
 	_res = Py_None;
+	Py_INCREF(handler); /* XXX leak, but needed */
 	return _res;
 }
 
@@ -1149,7 +1175,7 @@
 		return NULL;
 	_err = AERemoveEventHandler(theAEEventClass,
 	                            theAEEventID,
-	                            GenericEventHandler,
+	                            upp_GenericEventHandler,
 	                            0);
 	if (_err != noErr) return PyMac_Error(_err);
 	Py_INCREF(Py_None);
@@ -1244,6 +1270,9 @@
 
 
 
+		upp_AEIdleProc = NewAEIdleProc(AEIdleProc);
+		upp_GenericEventHandler = NewAEEventHandlerProc(GenericEventHandler);
+
 
 	m = Py_InitModule("AE", AE_methods);
 	d = PyModule_GetDict(m);
diff --git a/Mac/Modules/ae/aesupport.py b/Mac/Modules/ae/aesupport.py
index 49f072b..eb18956 100644
--- a/Mac/Modules/ae/aesupport.py
+++ b/Mac/Modules/ae/aesupport.py
@@ -39,7 +39,7 @@
 	def __init__(self, name = 'EventHandler', format = ''):
 		Type.__init__(self, name, format)
 	def declare(self, name):
-		Output("AEEventHandlerProcPtr %s__proc__ = GenericEventHandler;", name)
+		Output("AEEventHandlerUPP %s__proc__ = upp_GenericEventHandler;", name)
 		Output("PyObject *%s;", name)
 	def getargsFormat(self):
 		return "O"
@@ -53,19 +53,21 @@
 		return "O"
 	def mkvalueArgs(self, name):
 		return name
+	def cleanup(self, name):
+		Output("Py_INCREF(%s); /* XXX leak, but needed */", name)
 
 class EHNoRefConType(EHType):
 	def passInput(self, name):
-		return "GenericEventHandler"
+		return "upp_GenericEventHandler"
 
 EventHandler = EHType()
 EventHandlerNoRefCon = EHNoRefConType()
 
 
-IdleProcPtr = FakeType("AEIdleProc")
-EventFilterProcPtr = FakeType("(AEFilterProcPtr)0")
+IdleProcPtr = FakeType("upp_AEIdleProc")
+EventFilterProcPtr = FakeType("(AEFilterUPP)0")
 NMRecPtr = FakeType("(NMRecPtr)0")
-EventHandlerProcPtr = FakeType("GenericEventHandler")
+EventHandlerProcPtr = FakeType("upp_GenericEventHandler")
 AlwaysFalse = FakeType("0")
 
 
@@ -77,16 +79,39 @@
 #include <AppleEvents.h>
 
 #ifdef THINK_C
+#define AEIdleProcPtr IdleProcPtr
 #define AEFilterProcPtr EventFilterProcPtr
 #define AEEventHandlerProcPtr EventHandlerProcPtr
 #endif
 
+#ifndef __MWERKS__
+/* Actually, this is "if not universal headers".
+** I'm trying to setup the code here so that is easily automated,
+** as follows:
+** - Use the UPP in the source
+** - for pre-universal headers, #define each UPP as the corresponding ProcPtr
+** - for each routine we pass we declare a upp_xxx that
+**   we initialize to the correct value in the init routine.
+*/
+#define AEIdleUPP AEIdleProcPtr
+#define AEFilterUPP AEFilterProcPtr
+#define AEEventHandlerUPP AEEventHandlerProcPtr
+#define NewAEIdleProc(x) (x)
+#define NewAEFilterProc(x) (x)
+#define NewAEEventHandlerProc(x) (x)
+#endif
+
 static pascal OSErr GenericEventHandler(); /* Forward */
 
+AEEventHandlerUPP upp_GenericEventHandler;
+
 static pascal Boolean AEIdleProc(EventRecord *theEvent, long *sleepTime, RgnHandle *mouseRgn)
 {
-	return !PyMac_Idle();
+	(void) PyMac_Idle();
+	return 0;
 }
+
+AEIdleUPP upp_AEIdleProc;
 """
 
 finalstuff = finalstuff + """
@@ -121,6 +146,11 @@
 }
 """
 
+initstuff = initstuff + """
+	upp_AEIdleProc = NewAEIdleProc(AEIdleProc);
+	upp_GenericEventHandler = NewAEEventHandlerProc(GenericEventHandler);
+"""
+
 module = MacModule('AE', 'AE', includestuff, finalstuff, initstuff)
 
 class AEDescDefiniton(ObjectDefinition):