Exposed quite a few more calls.

This commit is contained in:
Just van Rossum 2001-12-12 20:48:53 +00:00
parent 1990943095
commit f8d6473782
3 changed files with 191 additions and 28 deletions

View File

@ -35,7 +35,7 @@ RefObjectTypes = ["EventRef",
"EventHotKeyRef",
]
class CarbonEvents_Scanner(Scanner):
class CarbonEvents_Scanner(Scanner_OSX):
def destination(self, type, name, arglist):
classname = "CarbonEventsFunction"
listname = "functions"
@ -50,8 +50,17 @@ class CarbonEvents_Scanner(Scanner):
print "not method"
return classname, listname
def writeinitialdefs(self):
self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n")
self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n")
self.defsfile.write("false = 0\n")
self.defsfile.write("true = 1\n")
self.defsfile.write("keyAEEventClass = FOUR_CHAR_CODE('evcl')\n")
self.defsfile.write("keyAEEventID = FOUR_CHAR_CODE('evti')\n")
def makeblacklistnames(self):
return [
"sHandler",
"MacCreateEvent",
"TrackMouseLocationWithOptions",
"TrackMouseLocation",
@ -64,6 +73,12 @@ class CarbonEvents_Scanner(Scanner):
"InvokeEventHandlerUPP",
"InvokeEventComparatorUPP",
"InvokeEventLoopTimerUPP",
"NewEventComparatorUPP",
"NewEventLoopTimerUPP",
"NewEventHandlerUPP",
"DisposeEventComparatorUPP",
"DisposeEventLoopTimerUPP",
"DisposeEventHandlerUPP",
# Wrote by hand
"InstallEventHandler",

View File

@ -11,19 +11,21 @@ for typ in RefObjectTypes:
execstr = "%(name)s = OpaqueByValueType('%(name)s')" % {"name": typ}
exec execstr
# these types will have no methods and will merely be opaque blobs
# should write getattr and setattr for them?
if 0:
# these types will have no methods and will merely be opaque blobs
# should write getattr and setattr for them?
StructObjectTypes = ["EventTypeSpec",
StructObjectTypes = ["EventTypeSpec",
"HIPoint",
"HICommand",
"EventHotKeyID",
]
for typ in StructObjectTypes:
for typ in StructObjectTypes:
execstr = "%(name)s = OpaqueType('%(name)s')" % {"name": typ}
exec execstr
EventHotKeyID = OpaqueByValueType("EventHotKeyID", "EventHotKeyID")
EventTypeSpec_ptr = OpaqueType("EventTypeSpec", "EventTypeSpec")
# is this the right type for the void * in GetEventParameter
@ -51,7 +53,7 @@ EventHandlerProcPtr = FakeType("(EventHandlerProcPtr)0")
CarbonEventsFunction = OSErrFunctionGenerator
CarbonEventsMethod = OSErrMethodGenerator
includestuff = """
includestuff = r"""
#ifdef WITHOUT_FRAMEWORKS
#include <CarbonEvents.h>
#else
@ -60,7 +62,15 @@ includestuff = """
#include "macglue.h"
#define USE_MAC_MP_MULTITHREADING 1
/* 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; \
}} while(0)
#define USE_MAC_MP_MULTITHREADING 0
#if USE_MAC_MP_MULTITHREADING
static PyThreadState *_save;
@ -131,11 +141,11 @@ EventHotKeyID_Convert(PyObject *v, EventHotKeyID *out)
/********** end EventHotKeyID *******/
/******** handlecommand ***********/
/******** myEventHandler ***********/
static EventHandlerUPP gEventHandlerUPP;
static EventHandlerUPP myEventHandlerUPP;
pascal OSStatus CarbonEvents_HandleEvent(EventHandlerCallRef handlerRef, EventRef event, void *outPyObject) {
pascal OSStatus myEventHandler(EventHandlerCallRef handlerRef, EventRef event, void *outPyObject) {
PyObject *retValue;
int status;
@ -155,12 +165,13 @@ pascal OSStatus CarbonEvents_HandleEvent(EventHandlerCallRef handlerRef, EventRe
return status;
}
/******** end handlecommand ***********/
/******** end myEventHandler ***********/
"""
initstuff = initstuff + """
gEventHandlerUPP = NewEventHandlerUPP(CarbonEvents_HandleEvent);
PyMac_PRECHECK(NewEventHandlerUPP); /* This can fail if CarbonLib is too old */
myEventHandlerUPP = NewEventHandlerUPP(myEventHandler);
"""
module = MacModule('_CarbonEvt', 'CarbonEvents', includestuff, finalstuff, initstuff)
@ -197,7 +208,7 @@ OSStatus _err;
if (!PyArg_ParseTuple(_args, "O&O", EventTypeSpec_Convert, &inSpec, &callback))
return NULL;
_err = InstallEventHandler(_self->ob_itself, gEventHandlerUPP, 1, &inSpec, (void *)callback, &outRef);
_err = InstallEventHandler(_self->ob_itself, myEventHandlerUPP, 1, &inSpec, (void *)callback, &outRef);
if (_err != noErr) return PyMac_Error(_err);
return Py_BuildValue("O&", EventHandlerRef_New, outRef);"""
@ -209,7 +220,7 @@ EventTargetRefobject.add(f)
runappeventloop = """
#if USE_MAC_MP_MULTITHREADING
if (MPCreateCriticalRegion(&reentrantLock) != noErr) {
printf("lock failure\\n");
PySys_WriteStderr("lock failure\\n");
return NULL;
}
_save = PyEval_SaveThread();

View File

@ -13,7 +13,15 @@
#include "macglue.h"
#define USE_MAC_MP_MULTITHREADING 1
/* 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; \
}} while(0)
#define USE_MAC_MP_MULTITHREADING 0
#if USE_MAC_MP_MULTITHREADING
static PyThreadState *_save;
@ -84,11 +92,11 @@ EventHotKeyID_Convert(PyObject *v, EventHotKeyID *out)
/********** end EventHotKeyID *******/
/******** handlecommand ***********/
/******** myEventHandler ***********/
static EventHandlerUPP gEventHandlerUPP;
static EventHandlerUPP myEventHandlerUPP;
pascal OSStatus CarbonEvents_HandleEvent(EventHandlerCallRef handlerRef, EventRef event, void *outPyObject) {
pascal OSStatus myEventHandler(EventHandlerCallRef handlerRef, EventRef event, void *outPyObject) {
PyObject *retValue;
int status;
@ -108,7 +116,7 @@ pascal OSStatus CarbonEvents_HandleEvent(EventHandlerCallRef handlerRef, EventRe
return status;
}
/******** end handlecommand ***********/
/******** end myEventHandler ***********/
static PyObject *CarbonEvents_Error;
@ -1059,7 +1067,7 @@ static PyObject *EventTargetRef_InstallEventHandler(EventTargetRefObject *_self,
if (!PyArg_ParseTuple(_args, "O&O", EventTypeSpec_Convert, &inSpec, &callback))
return NULL;
_err = InstallEventHandler(_self->ob_itself, gEventHandlerUPP, 1, &inSpec, (void *)callback, &outRef);
_err = InstallEventHandler(_self->ob_itself, myEventHandlerUPP, 1, &inSpec, (void *)callback, &outRef);
if (_err != noErr) return PyMac_Error(_err);
return Py_BuildValue("O&", EventHandlerRef_New, outRef);
@ -1146,7 +1154,22 @@ static void EventHotKeyRef_dealloc(EventHotKeyRefObject *self)
PyMem_DEL(self);
}
static PyObject *EventHotKeyRef_UnregisterEventHotKey(EventHotKeyRefObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSStatus _err;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
_err = UnregisterEventHotKey(_self->ob_itself);
if (_err != noErr) return PyMac_Error(_err);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyMethodDef EventHotKeyRef_methods[] = {
{"UnregisterEventHotKey", (PyCFunction)EventHotKeyRef_UnregisterEventHotKey, 1,
"() -> None"},
{NULL, NULL, 0}
};
@ -1366,6 +1389,18 @@ static PyObject *CarbonEvents_GetUserFocusEventTarget(PyObject *_self, PyObject
return _res;
}
static PyObject *CarbonEvents_GetEventDispatcherTarget(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
EventTargetRef _rv;
if (!PyArg_ParseTuple(_args, ""))
return NULL;
_rv = GetEventDispatcherTarget();
_res = Py_BuildValue("O&",
EventTargetRef_New, _rv);
return _res;
}
static PyObject *CarbonEvents_QuitApplicationEventLoop(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
@ -1377,6 +1412,66 @@ static PyObject *CarbonEvents_QuitApplicationEventLoop(PyObject *_self, PyObject
return _res;
}
static PyObject *CarbonEvents_RunAppModalLoopForWindow(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSStatus _err;
WindowPtr inWindow;
if (!PyArg_ParseTuple(_args, "O&",
WinObj_Convert, &inWindow))
return NULL;
_err = RunAppModalLoopForWindow(inWindow);
if (_err != noErr) return PyMac_Error(_err);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *CarbonEvents_QuitAppModalLoopForWindow(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSStatus _err;
WindowPtr inWindow;
if (!PyArg_ParseTuple(_args, "O&",
WinObj_Convert, &inWindow))
return NULL;
_err = QuitAppModalLoopForWindow(inWindow);
if (_err != noErr) return PyMac_Error(_err);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *CarbonEvents_BeginAppModalStateForWindow(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSStatus _err;
WindowPtr inWindow;
if (!PyArg_ParseTuple(_args, "O&",
WinObj_Convert, &inWindow))
return NULL;
_err = BeginAppModalStateForWindow(inWindow);
if (_err != noErr) return PyMac_Error(_err);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *CarbonEvents_EndAppModalStateForWindow(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSStatus _err;
WindowPtr inWindow;
if (!PyArg_ParseTuple(_args, "O&",
WinObj_Convert, &inWindow))
return NULL;
_err = EndAppModalStateForWindow(inWindow);
if (_err != noErr) return PyMac_Error(_err);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyObject *CarbonEvents_SetUserFocusWindow(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
@ -1474,13 +1569,42 @@ static PyObject *CarbonEvents_GetWindowCancelButton(PyObject *_self, PyObject *_
return _res;
}
static PyObject *CarbonEvents_RegisterEventHotKey(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSStatus _err;
UInt32 inHotKeyCode;
UInt32 inHotKeyModifiers;
EventHotKeyID inHotKeyID;
EventTargetRef inTarget;
OptionBits inOptions;
EventHotKeyRef outRef;
if (!PyArg_ParseTuple(_args, "llO&O&l",
&inHotKeyCode,
&inHotKeyModifiers,
EventHotKeyID_Convert, &inHotKeyID,
EventTargetRef_Convert, &inTarget,
&inOptions))
return NULL;
_err = RegisterEventHotKey(inHotKeyCode,
inHotKeyModifiers,
inHotKeyID,
inTarget,
inOptions,
&outRef);
if (_err != noErr) return PyMac_Error(_err);
_res = Py_BuildValue("O&",
EventHotKeyRef_New, outRef);
return _res;
}
static PyObject *CarbonEvents_RunApplicationEventLoop(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
#if USE_MAC_MP_MULTITHREADING
if (MPCreateCriticalRegion(&reentrantLock) != noErr) {
printf("lock failure\n");
PySys_WriteStderr("lock failure\n");
return NULL;
}
_save = PyEval_SaveThread();
@ -1527,8 +1651,18 @@ static PyMethodDef CarbonEvents_methods[] = {
"() -> (EventTargetRef _rv)"},
{"GetUserFocusEventTarget", (PyCFunction)CarbonEvents_GetUserFocusEventTarget, 1,
"() -> (EventTargetRef _rv)"},
{"GetEventDispatcherTarget", (PyCFunction)CarbonEvents_GetEventDispatcherTarget, 1,
"() -> (EventTargetRef _rv)"},
{"QuitApplicationEventLoop", (PyCFunction)CarbonEvents_QuitApplicationEventLoop, 1,
"() -> None"},
{"RunAppModalLoopForWindow", (PyCFunction)CarbonEvents_RunAppModalLoopForWindow, 1,
"(WindowPtr inWindow) -> None"},
{"QuitAppModalLoopForWindow", (PyCFunction)CarbonEvents_QuitAppModalLoopForWindow, 1,
"(WindowPtr inWindow) -> None"},
{"BeginAppModalStateForWindow", (PyCFunction)CarbonEvents_BeginAppModalStateForWindow, 1,
"(WindowPtr inWindow) -> None"},
{"EndAppModalStateForWindow", (PyCFunction)CarbonEvents_EndAppModalStateForWindow, 1,
"(WindowPtr inWindow) -> None"},
{"SetUserFocusWindow", (PyCFunction)CarbonEvents_SetUserFocusWindow, 1,
"(WindowPtr inWindow) -> None"},
{"GetUserFocusWindow", (PyCFunction)CarbonEvents_GetUserFocusWindow, 1,
@ -1541,6 +1675,8 @@ static PyMethodDef CarbonEvents_methods[] = {
"(WindowPtr inWindow) -> (ControlHandle outControl)"},
{"GetWindowCancelButton", (PyCFunction)CarbonEvents_GetWindowCancelButton, 1,
"(WindowPtr inWindow) -> (ControlHandle outControl)"},
{"RegisterEventHotKey", (PyCFunction)CarbonEvents_RegisterEventHotKey, 1,
"(UInt32 inHotKeyCode, UInt32 inHotKeyModifiers, EventHotKeyID inHotKeyID, EventTargetRef inTarget, OptionBits inOptions) -> (EventHotKeyRef outRef)"},
{"RunApplicationEventLoop", (PyCFunction)CarbonEvents_RunApplicationEventLoop, 1,
"() -> ()"},
{NULL, NULL, 0}
@ -1556,7 +1692,8 @@ void init_CarbonEvt(void)
gEventHandlerUPP = NewEventHandlerUPP(CarbonEvents_HandleEvent);
PyMac_PRECHECK(NewEventHandlerUPP); /* This can fail if CarbonLib is too old */
myEventHandlerUPP = NewEventHandlerUPP(myEventHandler);
m = Py_InitModule("_CarbonEvt", CarbonEvents_methods);