Added HandleEvent method to macos, so python programs can hand back

events they don't want to handle to stdio
This commit is contained in:
Jack Jansen 1995-02-02 14:25:56 +00:00
parent 8828fcf738
commit a76382a6ac
3 changed files with 39 additions and 13 deletions

View file

@ -37,7 +37,8 @@ int PyMac_Idle Py_PROTO((void)); /* Idle routine */
void PyMac_Yield Py_PROTO((void)); /* optional idle routine for mainloop */ void PyMac_Yield Py_PROTO((void)); /* optional idle routine for mainloop */
void PyMac_SetYield Py_PROTO((long, long, long, long)); /* Set timeouts */ void PyMac_SetYield Py_PROTO((long, long, long, long)); /* Set timeouts */
PyObject *PyErr_Mac(PyObject *, int); /* Exception with a mac error */ 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 */ int PyMac_Idle(void); /* Idle routine */

View file

@ -202,6 +202,19 @@ MacOS_EnableAppswitch(PyObject *self, PyObject *args)
return Py_None; 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[] = { static PyMethodDef MacOS_Methods[] = {
{"AcceptHighLevelEvent", MacOS_AcceptHighLevelEvent, 1}, {"AcceptHighLevelEvent", MacOS_AcceptHighLevelEvent, 1},
{"GetCreatorAndType", MacOS_GetCreatorAndType, 1}, {"GetCreatorAndType", MacOS_GetCreatorAndType, 1},
@ -211,6 +224,7 @@ static PyMethodDef MacOS_Methods[] = {
#endif #endif
{"SetScheduleTimes", MacOS_SetScheduleTimes, 1}, {"SetScheduleTimes", MacOS_SetScheduleTimes, 1},
{"EnableAppswitch", MacOS_EnableAppswitch, 1}, {"EnableAppswitch", MacOS_EnableAppswitch, 1},
{"HandleEvent", MacOS_HandleEvent, 1},
{NULL, NULL} /* Sentinel */ {NULL, NULL} /* Sentinel */
}; };

View file

@ -266,6 +266,28 @@ PyMac_SetYield(long fgi, long fgy, long bgi, long bgy)
yield_bg = bgy; 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. ** Yield the CPU to other tasks.
*/ */
@ -273,7 +295,6 @@ static
PyMac_DoYield() PyMac_DoYield()
{ {
EventRecord ev; EventRecord ev;
WindowPtr wp;
long yield; long yield;
static int no_waitnextevent = -1; static int no_waitnextevent = -1;
int gotone; int gotone;
@ -306,17 +327,7 @@ PyMac_DoYield()
/* Get out quickly if nothing interesting is happening */ /* Get out quickly if nothing interesting is happening */
if ( !gotone || ev.what == nullEvent ) if ( !gotone || ev.what == nullEvent )
break; break;
PyMac_HandleEvent(&ev);
#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__ */
} }
lastyield = TickCount(); lastyield = TickCount();
} }