Added HandleEvent method to macos, so python programs can hand back
events they don't want to handle to stdio
diff --git a/Mac/Include/macglue.h b/Mac/Include/macglue.h
index b61a78e..7944471 100644
--- a/Mac/Include/macglue.h
+++ b/Mac/Include/macglue.h
@@ -37,7 +37,8 @@
void PyMac_Yield Py_PROTO((void)); /* optional idle routine for mainloop */
void PyMac_SetYield Py_PROTO((long, long, long, long)); /* Set timeouts */
PyObject *PyErr_Mac(PyObject *, int); /* Exception with a mac error */
-PyObject *PyMac_Error(OSErr); /* Uses PyMac_GetOSErrException */
+PyObject *PyMac_Error(OSErr); /* Uses PyMac_GetOSErrException */
+void PyMac_HandleEvent Py_PROTO((EventRecord *)); /* Handle one event, if possible */
int PyMac_Idle(void); /* Idle routine */
diff --git a/Mac/Modules/macosmodule.c b/Mac/Modules/macosmodule.c
index 2b98fc6..ceb8a96 100644
--- a/Mac/Modules/macosmodule.c
+++ b/Mac/Modules/macosmodule.c
@@ -202,6 +202,19 @@
return Py_None;
}
+
+static PyObject *
+MacOS_HandleEvent(PyObject *self, PyObject *args)
+{
+ EventRecord ev;
+
+ if (!PyArg_ParseTuple(args, "O&", PyMac_GetEventRecord, &ev))
+ return NULL;
+ PyMac_HandleEvent(&ev);
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
static PyMethodDef MacOS_Methods[] = {
{"AcceptHighLevelEvent", MacOS_AcceptHighLevelEvent, 1},
{"GetCreatorAndType", MacOS_GetCreatorAndType, 1},
@@ -211,6 +224,7 @@
#endif
{"SetScheduleTimes", MacOS_SetScheduleTimes, 1},
{"EnableAppswitch", MacOS_EnableAppswitch, 1},
+ {"HandleEvent", MacOS_HandleEvent, 1},
{NULL, NULL} /* Sentinel */
};
diff --git a/Mac/Python/macglue.c b/Mac/Python/macglue.c
index a99023b..98a5c7b 100644
--- a/Mac/Python/macglue.c
+++ b/Mac/Python/macglue.c
@@ -267,13 +267,34 @@
}
/*
+** Handle an event, either one found in the mainloop eventhandler or
+** one passed back from the python program.
+*/
+void
+PyMac_HandleEvent(evp)
+ EventRecord *evp;
+{
+ WindowPtr wp;
+
+#ifdef __MWERKS__
+ /* If SIOUX wants it we're done */
+ (void)SIOUXHandleOneEvent(evp);
+#else
+ /* Other compilers are just unlucky: we only weed out clicks in other applications */
+ if ( evp->what == mouseDown ) {
+ if ( FindWindow(evp->where, &wp) == inSysWindow )
+ SystemClick(evp, wp);
+ }
+#endif /* !__MWERKS__ */
+}
+
+/*
** Yield the CPU to other tasks.
*/
static
PyMac_DoYield()
{
EventRecord ev;
- WindowPtr wp;
long yield;
static int no_waitnextevent = -1;
int gotone;
@@ -306,17 +327,7 @@
/* Get out quickly if nothing interesting is happening */
if ( !gotone || ev.what == nullEvent )
break;
-
-#ifdef __MWERKS__
- /* If SIOUX wants it we're done too */
- (void)SIOUXHandleOneEvent(&ev);
-#else
- /* Other compilers are just unlucky: we only weed out clicks in other applications */
- if ( ev.what == mouseDown ) {
- if ( FindWindow(ev.where, &wp) == inSysWindow )
- SystemClick(&ev, wp);
- }
-#endif /* !__MWERKS__ */
+ PyMac_HandleEvent(&ev);
}
lastyield = TickCount();
}