summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Mac/Modules/qt/_Qtmodule.c66
-rw-r--r--Mac/Modules/qt/qtsupport.py91
2 files changed, 88 insertions, 69 deletions
diff --git a/Mac/Modules/qt/_Qtmodule.c b/Mac/Modules/qt/_Qtmodule.c
index ade8903..2618205 100644
--- a/Mac/Modules/qt/_Qtmodule.c
+++ b/Mac/Modules/qt/_Qtmodule.c
@@ -98,7 +98,7 @@ PyObject *IdleManagerObj_New(IdleManager itself)
{
IdleManagerObject *it;
if (itself == NULL) {
- PyErr_SetString(Qt_Error,"Cannot create null IdleManager");
+ PyErr_SetString(Qt_Error,"Cannot create IdleManager from NULL pointer");
return NULL;
}
it = PyObject_NEW(IdleManagerObject, &IdleManager_Type);
@@ -108,6 +108,11 @@ PyObject *IdleManagerObj_New(IdleManager itself)
}
int IdleManagerObj_Convert(PyObject *v, IdleManager *p_itself)
{
+ if (v == Py_None)
+ {
+ *p_itself = NULL;
+ return 1;
+ }
if (!IdleManagerObj_Check(v))
{
PyErr_SetString(PyExc_TypeError, "IdleManager required");
@@ -216,7 +221,7 @@ PyObject *MovieCtlObj_New(MovieController itself)
{
MovieControllerObject *it;
if (itself == NULL) {
- PyErr_SetString(Qt_Error,"Cannot create null MovieController");
+ PyErr_SetString(Qt_Error,"Cannot create MovieController from NULL pointer");
return NULL;
}
it = PyObject_NEW(MovieControllerObject, &MovieController_Type);
@@ -226,6 +231,11 @@ PyObject *MovieCtlObj_New(MovieController itself)
}
int MovieCtlObj_Convert(PyObject *v, MovieController *p_itself)
{
+ if (v == Py_None)
+ {
+ *p_itself = NULL;
+ return 1;
+ }
if (!MovieCtlObj_Check(v))
{
PyErr_SetString(PyExc_TypeError, "MovieController required");
@@ -237,7 +247,7 @@ int MovieCtlObj_Convert(PyObject *v, MovieController *p_itself)
static void MovieCtlObj_dealloc(MovieControllerObject *self)
{
- DisposeMovieController(self->ob_itself);
+ if (self->ob_itself) DisposeMovieController(self->ob_itself);
self->ob_type->tp_free((PyObject *)self);
}
@@ -1330,7 +1340,7 @@ PyObject *TimeBaseObj_New(TimeBase itself)
{
TimeBaseObject *it;
if (itself == NULL) {
- PyErr_SetString(Qt_Error,"Cannot create null TimeBase");
+ PyErr_SetString(Qt_Error,"Cannot create TimeBase from NULL pointer");
return NULL;
}
it = PyObject_NEW(TimeBaseObject, &TimeBase_Type);
@@ -1340,6 +1350,11 @@ PyObject *TimeBaseObj_New(TimeBase itself)
}
int TimeBaseObj_Convert(PyObject *v, TimeBase *p_itself)
{
+ if (v == Py_None)
+ {
+ *p_itself = NULL;
+ return 1;
+ }
if (!TimeBaseObj_Check(v))
{
PyErr_SetString(PyExc_TypeError, "TimeBase required");
@@ -1818,7 +1833,7 @@ PyObject *UserDataObj_New(UserData itself)
{
UserDataObject *it;
if (itself == NULL) {
- PyErr_SetString(Qt_Error,"Cannot create null UserData");
+ PyErr_SetString(Qt_Error,"Cannot create UserData from NULL pointer");
return NULL;
}
it = PyObject_NEW(UserDataObject, &UserData_Type);
@@ -1828,6 +1843,11 @@ PyObject *UserDataObj_New(UserData itself)
}
int UserDataObj_Convert(PyObject *v, UserData *p_itself)
{
+ if (v == Py_None)
+ {
+ *p_itself = NULL;
+ return 1;
+ }
if (!UserDataObj_Check(v))
{
PyErr_SetString(PyExc_TypeError, "UserData required");
@@ -1839,7 +1859,7 @@ int UserDataObj_Convert(PyObject *v, UserData *p_itself)
static void UserDataObj_dealloc(UserDataObject *self)
{
- DisposeUserData(self->ob_itself);
+ if (self->ob_itself) DisposeUserData(self->ob_itself);
self->ob_type->tp_free((PyObject *)self);
}
@@ -2183,7 +2203,7 @@ PyObject *MediaObj_New(Media itself)
{
MediaObject *it;
if (itself == NULL) {
- PyErr_SetString(Qt_Error,"Cannot create null Media");
+ PyErr_SetString(Qt_Error,"Cannot create Media from NULL pointer");
return NULL;
}
it = PyObject_NEW(MediaObject, &Media_Type);
@@ -2193,6 +2213,11 @@ PyObject *MediaObj_New(Media itself)
}
int MediaObj_Convert(PyObject *v, Media *p_itself)
{
+ if (v == Py_None)
+ {
+ *p_itself = NULL;
+ return 1;
+ }
if (!MediaObj_Check(v))
{
PyErr_SetString(PyExc_TypeError, "Media required");
@@ -2204,7 +2229,7 @@ int MediaObj_Convert(PyObject *v, Media *p_itself)
static void MediaObj_dealloc(MediaObject *self)
{
- DisposeTrackMedia(self->ob_itself);
+ if (self->ob_itself) DisposeTrackMedia(self->ob_itself);
self->ob_type->tp_free((PyObject *)self);
}
@@ -3419,7 +3444,7 @@ PyObject *TrackObj_New(Track itself)
{
TrackObject *it;
if (itself == NULL) {
- PyErr_SetString(Qt_Error,"Cannot create null Track");
+ PyErr_SetString(Qt_Error,"Cannot create Track from NULL pointer");
return NULL;
}
it = PyObject_NEW(TrackObject, &Track_Type);
@@ -3429,6 +3454,11 @@ PyObject *TrackObj_New(Track itself)
}
int TrackObj_Convert(PyObject *v, Track *p_itself)
{
+ if (v == Py_None)
+ {
+ *p_itself = NULL;
+ return 1;
+ }
if (!TrackObj_Check(v))
{
PyErr_SetString(PyExc_TypeError, "Track required");
@@ -3440,7 +3470,7 @@ int TrackObj_Convert(PyObject *v, Track *p_itself)
static void TrackObj_dealloc(TrackObject *self)
{
- DisposeMovieTrack(self->ob_itself);
+ if (self->ob_itself) DisposeMovieTrack(self->ob_itself);
self->ob_type->tp_free((PyObject *)self);
}
@@ -4761,7 +4791,7 @@ PyObject *MovieObj_New(Movie itself)
{
MovieObject *it;
if (itself == NULL) {
- PyErr_SetString(Qt_Error,"Cannot create null Movie");
+ PyErr_SetString(Qt_Error,"Cannot create Movie from NULL pointer");
return NULL;
}
it = PyObject_NEW(MovieObject, &Movie_Type);
@@ -4771,6 +4801,11 @@ PyObject *MovieObj_New(Movie itself)
}
int MovieObj_Convert(PyObject *v, Movie *p_itself)
{
+ if (v == Py_None)
+ {
+ *p_itself = NULL;
+ return 1;
+ }
if (!MovieObj_Check(v))
{
PyErr_SetString(PyExc_TypeError, "Movie required");
@@ -4782,7 +4817,7 @@ int MovieObj_Convert(PyObject *v, Movie *p_itself)
static void MovieObj_dealloc(MovieObject *self)
{
- DisposeMovie(self->ob_itself);
+ if (self->ob_itself) DisposeMovie(self->ob_itself);
self->ob_type->tp_free((PyObject *)self);
}
@@ -7308,7 +7343,7 @@ PyObject *SGOutputObj_New(SGOutput itself)
{
SGOutputObject *it;
if (itself == NULL) {
- PyErr_SetString(Qt_Error,"Cannot create null SGOutput");
+ PyErr_SetString(Qt_Error,"Cannot create SGOutput from NULL pointer");
return NULL;
}
it = PyObject_NEW(SGOutputObject, &SGOutput_Type);
@@ -7318,6 +7353,11 @@ PyObject *SGOutputObj_New(SGOutput itself)
}
int SGOutputObj_Convert(PyObject *v, SGOutput *p_itself)
{
+ if (v == Py_None)
+ {
+ *p_itself = NULL;
+ return 1;
+ }
if (!SGOutputObj_Check(v))
{
PyErr_SetString(PyExc_TypeError, "SGOutput required");
diff --git a/Mac/Modules/qt/qtsupport.py b/Mac/Modules/qt/qtsupport.py
index bdc5e7d..c2dd024 100644
--- a/Mac/Modules/qt/qtsupport.py
+++ b/Mac/Modules/qt/qtsupport.py
@@ -205,79 +205,58 @@ CodecQ = Type("CodecQ", "l")
dummyshortptr = FakeType('(short *)0')
dummyStringPtr = FakeType('(StringPtr)0')
-class MovieObjectDefinition(PEP253Mixin, GlobalObjectDefinition):
+# XXXX Need to override output_tp_newBody() to allow for None initializer.
+class QtGlobalObjectDefinition(PEP253Mixin, GlobalObjectDefinition):
def outputCheckNewArg(self):
+ # We don't allow NULL pointers to be returned by QuickTime API calls,
+ # in stead we raise an exception
Output("""if (itself == NULL) {
- PyErr_SetString(Qt_Error,"Cannot create null Movie");
+ PyErr_SetString(Qt_Error,"Cannot create %s from NULL pointer");
return NULL;
- }""")
+ }""", self.name)
+
+ def outputCheckConvertArg(self):
+ # But what we do allow is passing None whereever a quicktime object is
+ # expected, and pass this as NULL to the API routines. Note you can
+ # call methods too by creating an object with None as the initializer.
+ Output("if (v == Py_None)")
+ OutLbrace()
+ Output("*p_itself = NULL;")
+ Output("return 1;")
+ OutRbrace()
+
+class MovieObjectDefinition(QtGlobalObjectDefinition):
def outputFreeIt(self, itselfname):
- Output("DisposeMovie(%s);", itselfname)
+ Output("if (%s) DisposeMovie(%s);", itselfname, itselfname)
-class TrackObjectDefinition(PEP253Mixin, GlobalObjectDefinition):
- def outputCheckNewArg(self):
- Output("""if (itself == NULL) {
- PyErr_SetString(Qt_Error,"Cannot create null Track");
- return NULL;
- }""")
+class TrackObjectDefinition(QtGlobalObjectDefinition):
def outputFreeIt(self, itselfname):
- Output("DisposeMovieTrack(%s);", itselfname)
+ Output("if (%s) DisposeMovieTrack(%s);", itselfname, itselfname)
-class MediaObjectDefinition(PEP253Mixin, GlobalObjectDefinition):
- def outputCheckNewArg(self):
- Output("""if (itself == NULL) {
- PyErr_SetString(Qt_Error,"Cannot create null Media");
- return NULL;
- }""")
+class MediaObjectDefinition(QtGlobalObjectDefinition):
def outputFreeIt(self, itselfname):
- Output("DisposeTrackMedia(%s);", itselfname)
+ Output("if (%s) DisposeTrackMedia(%s);", itselfname, itselfname)
-class UserDataObjectDefinition(PEP253Mixin, GlobalObjectDefinition):
- def outputCheckNewArg(self):
- Output("""if (itself == NULL) {
- PyErr_SetString(Qt_Error,"Cannot create null UserData");
- return NULL;
- }""")
+class UserDataObjectDefinition(QtGlobalObjectDefinition):
def outputFreeIt(self, itselfname):
- Output("DisposeUserData(%s);", itselfname)
+ Output("if (%s) DisposeUserData(%s);", itselfname, itselfname)
-class TimeBaseObjectDefinition(PEP253Mixin, GlobalObjectDefinition):
- def outputCheckNewArg(self):
- Output("""if (itself == NULL) {
- PyErr_SetString(Qt_Error,"Cannot create null TimeBase");
- return NULL;
- }""")
-## def outputFreeIt(self, itselfname):
-## Output("DisposeTimeBase(%s);", itselfname)
-
-class MovieCtlObjectDefinition(PEP253Mixin, GlobalObjectDefinition):
- def outputCheckNewArg(self):
- Output("""if (itself == NULL) {
- PyErr_SetString(Qt_Error,"Cannot create null MovieController");
- return NULL;
- }""")
+class TimeBaseObjectDefinition(QtGlobalObjectDefinition):
+ pass
+
+class MovieCtlObjectDefinition(QtGlobalObjectDefinition):
def outputFreeIt(self, itselfname):
- Output("DisposeMovieController(%s);", itselfname)
+ Output("if (%s) DisposeMovieController(%s);", itselfname, itselfname)
-class IdleManagerObjectDefinition(PEP253Mixin, GlobalObjectDefinition):
- def outputCheckNewArg(self):
- Output("""if (itself == NULL) {
- PyErr_SetString(Qt_Error,"Cannot create null IdleManager");
- return NULL;
- }""")
-
-class SGOutputObjectDefinition(PEP253Mixin, GlobalObjectDefinition):
+class IdleManagerObjectDefinition(QtGlobalObjectDefinition):
+ pass
+
+class SGOutputObjectDefinition(QtGlobalObjectDefinition):
# XXXX I'm not sure I fully understand how SGOutput works. It seems it's always tied
# to a specific SeqGrabComponent, but I'm not 100% sure. Also, I'm not sure all the
# routines that return an SGOutput actually return a *new* SGOutput. Need to read up on
# this.
- def outputCheckNewArg(self):
- Output("""if (itself == NULL) {
- PyErr_SetString(Qt_Error,"Cannot create null SGOutput");
- return NULL;
- }""")
-# def outputFreeIt(self, itselfname):
-# Output("SGDisposeOutput(%s);", itselfname)
+ pass
# From here on it's basically all boiler plate...