mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
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:
parent
8828fcf738
commit
a76382a6ac
3 changed files with 39 additions and 13 deletions
|
@ -38,6 +38,7 @@ 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 */
|
||||||
|
|
||||||
|
|
|
@ -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 */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue