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 */
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},
#endif
{"SetScheduleTimes", MacOS_SetScheduleTimes, 1},
{"EnableAppswitch", MacOS_EnableAppswitch, 1},
+ {"HandleEvent", MacOS_HandleEvent, 1},
{NULL, NULL} /* Sentinel */
};
yield_bg = bgy;
}
+/*
+** 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.
*/
PyMac_DoYield()
{
EventRecord ev;
- WindowPtr wp;
long yield;
static int no_waitnextevent = -1;
int gotone;
/* 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();
}