558 lines
13 KiB
C
558 lines
13 KiB
C
|
|
/* ========================== Module _Evt =========================== */
|
|
|
|
#include "Python.h"
|
|
|
|
|
|
|
|
#ifdef _WIN32
|
|
#include "pywintoolbox.h"
|
|
#else
|
|
#include "macglue.h"
|
|
#include "pymactoolbox.h"
|
|
#endif
|
|
|
|
/* Macro to test whether a weak-loaded CFM function exists */
|
|
#define PyMac_PRECHECK(rtn) do { if ( &rtn == NULL ) {\
|
|
PyErr_SetString(PyExc_NotImplementedError, \
|
|
"Not available in this shared library/OS version"); \
|
|
return NULL; \
|
|
}} while(0)
|
|
|
|
|
|
#ifdef WITHOUT_FRAMEWORKS
|
|
#include <Events.h>
|
|
#else
|
|
#include <Carbon/Carbon.h>
|
|
#endif
|
|
|
|
|
|
static PyObject *Evt_Error;
|
|
|
|
static PyObject *Evt_GetMouse(PyObject *_self, PyObject *_args)
|
|
{
|
|
PyObject *_res = NULL;
|
|
Point mouseLoc;
|
|
#ifndef GetMouse
|
|
PyMac_PRECHECK(GetMouse);
|
|
#endif
|
|
if (!PyArg_ParseTuple(_args, ""))
|
|
return NULL;
|
|
GetMouse(&mouseLoc);
|
|
_res = Py_BuildValue("O&",
|
|
PyMac_BuildPoint, mouseLoc);
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Evt_Button(PyObject *_self, PyObject *_args)
|
|
{
|
|
PyObject *_res = NULL;
|
|
Boolean _rv;
|
|
#ifndef Button
|
|
PyMac_PRECHECK(Button);
|
|
#endif
|
|
if (!PyArg_ParseTuple(_args, ""))
|
|
return NULL;
|
|
_rv = Button();
|
|
_res = Py_BuildValue("b",
|
|
_rv);
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Evt_StillDown(PyObject *_self, PyObject *_args)
|
|
{
|
|
PyObject *_res = NULL;
|
|
Boolean _rv;
|
|
#ifndef StillDown
|
|
PyMac_PRECHECK(StillDown);
|
|
#endif
|
|
if (!PyArg_ParseTuple(_args, ""))
|
|
return NULL;
|
|
_rv = StillDown();
|
|
_res = Py_BuildValue("b",
|
|
_rv);
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Evt_WaitMouseUp(PyObject *_self, PyObject *_args)
|
|
{
|
|
PyObject *_res = NULL;
|
|
Boolean _rv;
|
|
#ifndef WaitMouseUp
|
|
PyMac_PRECHECK(WaitMouseUp);
|
|
#endif
|
|
if (!PyArg_ParseTuple(_args, ""))
|
|
return NULL;
|
|
_rv = WaitMouseUp();
|
|
_res = Py_BuildValue("b",
|
|
_rv);
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Evt_GetCaretTime(PyObject *_self, PyObject *_args)
|
|
{
|
|
PyObject *_res = NULL;
|
|
UInt32 _rv;
|
|
#ifndef GetCaretTime
|
|
PyMac_PRECHECK(GetCaretTime);
|
|
#endif
|
|
if (!PyArg_ParseTuple(_args, ""))
|
|
return NULL;
|
|
_rv = GetCaretTime();
|
|
_res = Py_BuildValue("l",
|
|
_rv);
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Evt_GetKeys(PyObject *_self, PyObject *_args)
|
|
{
|
|
PyObject *_res = NULL;
|
|
KeyMap theKeys__out__;
|
|
#ifndef GetKeys
|
|
PyMac_PRECHECK(GetKeys);
|
|
#endif
|
|
if (!PyArg_ParseTuple(_args, ""))
|
|
return NULL;
|
|
GetKeys(theKeys__out__);
|
|
_res = Py_BuildValue("s#",
|
|
(char *)&theKeys__out__, (int)sizeof(KeyMap));
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Evt_GetDblTime(PyObject *_self, PyObject *_args)
|
|
{
|
|
PyObject *_res = NULL;
|
|
UInt32 _rv;
|
|
#ifndef GetDblTime
|
|
PyMac_PRECHECK(GetDblTime);
|
|
#endif
|
|
if (!PyArg_ParseTuple(_args, ""))
|
|
return NULL;
|
|
_rv = GetDblTime();
|
|
_res = Py_BuildValue("l",
|
|
_rv);
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Evt_SetEventMask(PyObject *_self, PyObject *_args)
|
|
{
|
|
PyObject *_res = NULL;
|
|
EventMask value;
|
|
#ifndef SetEventMask
|
|
PyMac_PRECHECK(SetEventMask);
|
|
#endif
|
|
if (!PyArg_ParseTuple(_args, "H",
|
|
&value))
|
|
return NULL;
|
|
SetEventMask(value);
|
|
Py_INCREF(Py_None);
|
|
_res = Py_None;
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Evt_GetNextEvent(PyObject *_self, PyObject *_args)
|
|
{
|
|
PyObject *_res = NULL;
|
|
Boolean _rv;
|
|
EventMask eventMask;
|
|
EventRecord theEvent;
|
|
#ifndef GetNextEvent
|
|
PyMac_PRECHECK(GetNextEvent);
|
|
#endif
|
|
if (!PyArg_ParseTuple(_args, "H",
|
|
&eventMask))
|
|
return NULL;
|
|
_rv = GetNextEvent(eventMask,
|
|
&theEvent);
|
|
_res = Py_BuildValue("bO&",
|
|
_rv,
|
|
PyMac_BuildEventRecord, &theEvent);
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Evt_EventAvail(PyObject *_self, PyObject *_args)
|
|
{
|
|
PyObject *_res = NULL;
|
|
Boolean _rv;
|
|
EventMask eventMask;
|
|
EventRecord theEvent;
|
|
#ifndef EventAvail
|
|
PyMac_PRECHECK(EventAvail);
|
|
#endif
|
|
if (!PyArg_ParseTuple(_args, "H",
|
|
&eventMask))
|
|
return NULL;
|
|
_rv = EventAvail(eventMask,
|
|
&theEvent);
|
|
_res = Py_BuildValue("bO&",
|
|
_rv,
|
|
PyMac_BuildEventRecord, &theEvent);
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Evt_PostEvent(PyObject *_self, PyObject *_args)
|
|
{
|
|
PyObject *_res = NULL;
|
|
OSErr _err;
|
|
EventKind eventNum;
|
|
UInt32 eventMsg;
|
|
#ifndef PostEvent
|
|
PyMac_PRECHECK(PostEvent);
|
|
#endif
|
|
if (!PyArg_ParseTuple(_args, "Hl",
|
|
&eventNum,
|
|
&eventMsg))
|
|
return NULL;
|
|
_err = PostEvent(eventNum,
|
|
eventMsg);
|
|
if (_err != noErr) return PyMac_Error(_err);
|
|
Py_INCREF(Py_None);
|
|
_res = Py_None;
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Evt_FlushEvents(PyObject *_self, PyObject *_args)
|
|
{
|
|
PyObject *_res = NULL;
|
|
EventMask whichMask;
|
|
EventMask stopMask;
|
|
#ifndef FlushEvents
|
|
PyMac_PRECHECK(FlushEvents);
|
|
#endif
|
|
if (!PyArg_ParseTuple(_args, "HH",
|
|
&whichMask,
|
|
&stopMask))
|
|
return NULL;
|
|
FlushEvents(whichMask,
|
|
stopMask);
|
|
Py_INCREF(Py_None);
|
|
_res = Py_None;
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Evt_GetGlobalMouse(PyObject *_self, PyObject *_args)
|
|
{
|
|
PyObject *_res = NULL;
|
|
Point globalMouse;
|
|
#ifndef GetGlobalMouse
|
|
PyMac_PRECHECK(GetGlobalMouse);
|
|
#endif
|
|
if (!PyArg_ParseTuple(_args, ""))
|
|
return NULL;
|
|
GetGlobalMouse(&globalMouse);
|
|
_res = Py_BuildValue("O&",
|
|
PyMac_BuildPoint, globalMouse);
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Evt_GetCurrentKeyModifiers(PyObject *_self, PyObject *_args)
|
|
{
|
|
PyObject *_res = NULL;
|
|
UInt32 _rv;
|
|
#ifndef GetCurrentKeyModifiers
|
|
PyMac_PRECHECK(GetCurrentKeyModifiers);
|
|
#endif
|
|
if (!PyArg_ParseTuple(_args, ""))
|
|
return NULL;
|
|
_rv = GetCurrentKeyModifiers();
|
|
_res = Py_BuildValue("l",
|
|
_rv);
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Evt_CheckEventQueueForUserCancel(PyObject *_self, PyObject *_args)
|
|
{
|
|
PyObject *_res = NULL;
|
|
Boolean _rv;
|
|
#ifndef CheckEventQueueForUserCancel
|
|
PyMac_PRECHECK(CheckEventQueueForUserCancel);
|
|
#endif
|
|
if (!PyArg_ParseTuple(_args, ""))
|
|
return NULL;
|
|
_rv = CheckEventQueueForUserCancel();
|
|
_res = Py_BuildValue("b",
|
|
_rv);
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Evt_KeyScript(PyObject *_self, PyObject *_args)
|
|
{
|
|
PyObject *_res = NULL;
|
|
short code;
|
|
#ifndef KeyScript
|
|
PyMac_PRECHECK(KeyScript);
|
|
#endif
|
|
if (!PyArg_ParseTuple(_args, "h",
|
|
&code))
|
|
return NULL;
|
|
KeyScript(code);
|
|
Py_INCREF(Py_None);
|
|
_res = Py_None;
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Evt_IsCmdChar(PyObject *_self, PyObject *_args)
|
|
{
|
|
PyObject *_res = NULL;
|
|
Boolean _rv;
|
|
EventRecord event;
|
|
short test;
|
|
#ifndef IsCmdChar
|
|
PyMac_PRECHECK(IsCmdChar);
|
|
#endif
|
|
if (!PyArg_ParseTuple(_args, "O&h",
|
|
PyMac_GetEventRecord, &event,
|
|
&test))
|
|
return NULL;
|
|
_rv = IsCmdChar(&event,
|
|
test);
|
|
_res = Py_BuildValue("b",
|
|
_rv);
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Evt_LMGetKeyThresh(PyObject *_self, PyObject *_args)
|
|
{
|
|
PyObject *_res = NULL;
|
|
SInt16 _rv;
|
|
#ifndef LMGetKeyThresh
|
|
PyMac_PRECHECK(LMGetKeyThresh);
|
|
#endif
|
|
if (!PyArg_ParseTuple(_args, ""))
|
|
return NULL;
|
|
_rv = LMGetKeyThresh();
|
|
_res = Py_BuildValue("h",
|
|
_rv);
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Evt_LMSetKeyThresh(PyObject *_self, PyObject *_args)
|
|
{
|
|
PyObject *_res = NULL;
|
|
SInt16 value;
|
|
#ifndef LMSetKeyThresh
|
|
PyMac_PRECHECK(LMSetKeyThresh);
|
|
#endif
|
|
if (!PyArg_ParseTuple(_args, "h",
|
|
&value))
|
|
return NULL;
|
|
LMSetKeyThresh(value);
|
|
Py_INCREF(Py_None);
|
|
_res = Py_None;
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Evt_LMGetKeyRepThresh(PyObject *_self, PyObject *_args)
|
|
{
|
|
PyObject *_res = NULL;
|
|
SInt16 _rv;
|
|
#ifndef LMGetKeyRepThresh
|
|
PyMac_PRECHECK(LMGetKeyRepThresh);
|
|
#endif
|
|
if (!PyArg_ParseTuple(_args, ""))
|
|
return NULL;
|
|
_rv = LMGetKeyRepThresh();
|
|
_res = Py_BuildValue("h",
|
|
_rv);
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Evt_LMSetKeyRepThresh(PyObject *_self, PyObject *_args)
|
|
{
|
|
PyObject *_res = NULL;
|
|
SInt16 value;
|
|
#ifndef LMSetKeyRepThresh
|
|
PyMac_PRECHECK(LMSetKeyRepThresh);
|
|
#endif
|
|
if (!PyArg_ParseTuple(_args, "h",
|
|
&value))
|
|
return NULL;
|
|
LMSetKeyRepThresh(value);
|
|
Py_INCREF(Py_None);
|
|
_res = Py_None;
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Evt_LMGetKbdLast(PyObject *_self, PyObject *_args)
|
|
{
|
|
PyObject *_res = NULL;
|
|
UInt8 _rv;
|
|
#ifndef LMGetKbdLast
|
|
PyMac_PRECHECK(LMGetKbdLast);
|
|
#endif
|
|
if (!PyArg_ParseTuple(_args, ""))
|
|
return NULL;
|
|
_rv = LMGetKbdLast();
|
|
_res = Py_BuildValue("b",
|
|
_rv);
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Evt_LMSetKbdLast(PyObject *_self, PyObject *_args)
|
|
{
|
|
PyObject *_res = NULL;
|
|
UInt8 value;
|
|
#ifndef LMSetKbdLast
|
|
PyMac_PRECHECK(LMSetKbdLast);
|
|
#endif
|
|
if (!PyArg_ParseTuple(_args, "b",
|
|
&value))
|
|
return NULL;
|
|
LMSetKbdLast(value);
|
|
Py_INCREF(Py_None);
|
|
_res = Py_None;
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Evt_LMGetKbdType(PyObject *_self, PyObject *_args)
|
|
{
|
|
PyObject *_res = NULL;
|
|
UInt8 _rv;
|
|
#ifndef LMGetKbdType
|
|
PyMac_PRECHECK(LMGetKbdType);
|
|
#endif
|
|
if (!PyArg_ParseTuple(_args, ""))
|
|
return NULL;
|
|
_rv = LMGetKbdType();
|
|
_res = Py_BuildValue("b",
|
|
_rv);
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Evt_LMSetKbdType(PyObject *_self, PyObject *_args)
|
|
{
|
|
PyObject *_res = NULL;
|
|
UInt8 value;
|
|
#ifndef LMSetKbdType
|
|
PyMac_PRECHECK(LMSetKbdType);
|
|
#endif
|
|
if (!PyArg_ParseTuple(_args, "b",
|
|
&value))
|
|
return NULL;
|
|
LMSetKbdType(value);
|
|
Py_INCREF(Py_None);
|
|
_res = Py_None;
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Evt_TickCount(PyObject *_self, PyObject *_args)
|
|
{
|
|
PyObject *_res = NULL;
|
|
UInt32 _rv;
|
|
#ifndef TickCount
|
|
PyMac_PRECHECK(TickCount);
|
|
#endif
|
|
if (!PyArg_ParseTuple(_args, ""))
|
|
return NULL;
|
|
_rv = TickCount();
|
|
_res = Py_BuildValue("l",
|
|
_rv);
|
|
return _res;
|
|
}
|
|
|
|
static PyObject *Evt_WaitNextEvent(PyObject *_self, PyObject *_args)
|
|
{
|
|
PyObject *_res = NULL;
|
|
|
|
Boolean _rv;
|
|
EventMask eventMask;
|
|
EventRecord theEvent;
|
|
UInt32 sleep;
|
|
Handle mouseregion = (Handle)0;
|
|
|
|
if (!PyArg_ParseTuple(_args, "Hl|O&",
|
|
&eventMask,
|
|
&sleep,
|
|
OptResObj_Convert, &mouseregion))
|
|
return NULL;
|
|
_rv = WaitNextEvent(eventMask,
|
|
&theEvent,
|
|
sleep,
|
|
(RgnHandle)mouseregion);
|
|
_res = Py_BuildValue("bO&",
|
|
_rv,
|
|
PyMac_BuildEventRecord, &theEvent);
|
|
return _res;
|
|
|
|
}
|
|
|
|
static PyMethodDef Evt_methods[] = {
|
|
{"GetMouse", (PyCFunction)Evt_GetMouse, 1,
|
|
PyDoc_STR("() -> (Point mouseLoc)")},
|
|
{"Button", (PyCFunction)Evt_Button, 1,
|
|
PyDoc_STR("() -> (Boolean _rv)")},
|
|
{"StillDown", (PyCFunction)Evt_StillDown, 1,
|
|
PyDoc_STR("() -> (Boolean _rv)")},
|
|
{"WaitMouseUp", (PyCFunction)Evt_WaitMouseUp, 1,
|
|
PyDoc_STR("() -> (Boolean _rv)")},
|
|
{"GetCaretTime", (PyCFunction)Evt_GetCaretTime, 1,
|
|
PyDoc_STR("() -> (UInt32 _rv)")},
|
|
{"GetKeys", (PyCFunction)Evt_GetKeys, 1,
|
|
PyDoc_STR("() -> (KeyMap theKeys)")},
|
|
{"GetDblTime", (PyCFunction)Evt_GetDblTime, 1,
|
|
PyDoc_STR("() -> (UInt32 _rv)")},
|
|
{"SetEventMask", (PyCFunction)Evt_SetEventMask, 1,
|
|
PyDoc_STR("(EventMask value) -> None")},
|
|
{"GetNextEvent", (PyCFunction)Evt_GetNextEvent, 1,
|
|
PyDoc_STR("(EventMask eventMask) -> (Boolean _rv, EventRecord theEvent)")},
|
|
{"EventAvail", (PyCFunction)Evt_EventAvail, 1,
|
|
PyDoc_STR("(EventMask eventMask) -> (Boolean _rv, EventRecord theEvent)")},
|
|
{"PostEvent", (PyCFunction)Evt_PostEvent, 1,
|
|
PyDoc_STR("(EventKind eventNum, UInt32 eventMsg) -> None")},
|
|
{"FlushEvents", (PyCFunction)Evt_FlushEvents, 1,
|
|
PyDoc_STR("(EventMask whichMask, EventMask stopMask) -> None")},
|
|
{"GetGlobalMouse", (PyCFunction)Evt_GetGlobalMouse, 1,
|
|
PyDoc_STR("() -> (Point globalMouse)")},
|
|
{"GetCurrentKeyModifiers", (PyCFunction)Evt_GetCurrentKeyModifiers, 1,
|
|
PyDoc_STR("() -> (UInt32 _rv)")},
|
|
{"CheckEventQueueForUserCancel", (PyCFunction)Evt_CheckEventQueueForUserCancel, 1,
|
|
PyDoc_STR("() -> (Boolean _rv)")},
|
|
{"KeyScript", (PyCFunction)Evt_KeyScript, 1,
|
|
PyDoc_STR("(short code) -> None")},
|
|
{"IsCmdChar", (PyCFunction)Evt_IsCmdChar, 1,
|
|
PyDoc_STR("(EventRecord event, short test) -> (Boolean _rv)")},
|
|
{"LMGetKeyThresh", (PyCFunction)Evt_LMGetKeyThresh, 1,
|
|
PyDoc_STR("() -> (SInt16 _rv)")},
|
|
{"LMSetKeyThresh", (PyCFunction)Evt_LMSetKeyThresh, 1,
|
|
PyDoc_STR("(SInt16 value) -> None")},
|
|
{"LMGetKeyRepThresh", (PyCFunction)Evt_LMGetKeyRepThresh, 1,
|
|
PyDoc_STR("() -> (SInt16 _rv)")},
|
|
{"LMSetKeyRepThresh", (PyCFunction)Evt_LMSetKeyRepThresh, 1,
|
|
PyDoc_STR("(SInt16 value) -> None")},
|
|
{"LMGetKbdLast", (PyCFunction)Evt_LMGetKbdLast, 1,
|
|
PyDoc_STR("() -> (UInt8 _rv)")},
|
|
{"LMSetKbdLast", (PyCFunction)Evt_LMSetKbdLast, 1,
|
|
PyDoc_STR("(UInt8 value) -> None")},
|
|
{"LMGetKbdType", (PyCFunction)Evt_LMGetKbdType, 1,
|
|
PyDoc_STR("() -> (UInt8 _rv)")},
|
|
{"LMSetKbdType", (PyCFunction)Evt_LMSetKbdType, 1,
|
|
PyDoc_STR("(UInt8 value) -> None")},
|
|
{"TickCount", (PyCFunction)Evt_TickCount, 1,
|
|
PyDoc_STR("() -> (UInt32 _rv)")},
|
|
{"WaitNextEvent", (PyCFunction)Evt_WaitNextEvent, 1,
|
|
PyDoc_STR("(EventMask eventMask, UInt32 sleep [,RegionHandle]) -> (Boolean _rv, EventRecord theEvent)")},
|
|
{NULL, NULL, 0}
|
|
};
|
|
|
|
|
|
|
|
|
|
void init_Evt(void)
|
|
{
|
|
PyObject *m;
|
|
PyObject *d;
|
|
|
|
|
|
|
|
|
|
m = Py_InitModule("_Evt", Evt_methods);
|
|
d = PyModule_GetDict(m);
|
|
Evt_Error = PyMac_GetOSErrException();
|
|
if (Evt_Error == NULL ||
|
|
PyDict_SetItemString(d, "Error", Evt_Error) != 0)
|
|
return;
|
|
}
|
|
|
|
/* ======================== End module _Evt ========================= */
|
|
|