diff options
author | Hugo Parente Lima <hugo.pl@gmail.com> | 2011-06-10 18:35:31 -0300 |
---|---|---|
committer | Hugo Parente Lima <hugo.pl@gmail.com> | 2012-03-08 16:54:29 -0300 |
commit | 590abafc54206e458066f5632accda94e37f5edf (patch) | |
tree | 6e7fb1ec6c820db8d85b1c186f7194fc93f53061 /PySide | |
parent | b66f8a789a55d07ad9fec0d9c40893ecf3952157 (diff) |
Fix bug 822 - "Can't use QApplication without X"
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
Luciano Wolf <luciano.wolf@openbossa.org>
Diffstat (limited to 'PySide')
-rw-r--r-- | PySide/QtGui/glue/qapplication_init.cpp | 36 | ||||
-rw-r--r-- | PySide/QtGui/typesystem_gui_common.xml | 16 |
2 files changed, 38 insertions, 14 deletions
diff --git a/PySide/QtGui/glue/qapplication_init.cpp b/PySide/QtGui/glue/qapplication_init.cpp index 16c7fef7a..f2e972a63 100644 --- a/PySide/QtGui/glue/qapplication_init.cpp +++ b/PySide/QtGui/glue/qapplication_init.cpp @@ -5,23 +5,18 @@ static int QApplicationArgCount; static char** QApplicationArgValues; static const char QAPP_MACRO[] = "qApp"; -void QApplication_constructor(PyObject* self, PyObject* args, QApplicationWrapper** cptr) +bool QApplicationConstructorStart(PyObject* argv) { if (QApplication::instance()) { PyErr_SetString(PyExc_RuntimeError, "A QApplication instance already exists."); - return; + return false; } - int numArgs = PyTuple_GET_SIZE(args); - if (numArgs != 1 - || !Shiboken::sequenceToArgcArgv(PyTuple_GET_ITEM(args, 0), &QApplicationArgCount, &QApplicationArgValues, "PySideApp")) { - PyErr_BadArgument(); - return; - } - - *cptr = new QApplicationWrapper(QApplicationArgCount, QApplicationArgValues); - Shiboken::Object::releaseOwnership(reinterpret_cast<SbkObject*>(self)); + return Shiboken::sequenceToArgcArgv(argv, &QApplicationArgCount, &QApplicationArgValues, "PySideApp"); +} +void QApplicationConstructorEnd(PyObject* self) +{ // Verify if qApp is in main module PyObject* globalsDict = PyEval_GetGlobals(); if (globalsDict) { @@ -34,3 +29,22 @@ void QApplication_constructor(PyObject* self, PyObject* args, QApplicationWrappe PySide::registerCleanupFunction(&PySide::destroyQCoreApplication); Py_INCREF(self); } + +static void QApplicationConstructor(PyObject* self, PyObject* argv, QApplicationWrapper** cptr) +{ + if (QApplicationConstructorStart(argv)) { + *cptr = new QApplicationWrapper(QApplicationArgCount, QApplicationArgValues); + Shiboken::Object::releaseOwnership(reinterpret_cast<SbkObject*>(self)); + QApplicationConstructorEnd(self); + } +} + +template <typename T> +static void QApplicationConstructor(PyObject* self, PyObject* argv, T extraArg, QApplicationWrapper** cptr) +{ + if (QApplicationConstructorStart(argv)) { + *cptr = new QApplicationWrapper(QApplicationArgCount, QApplicationArgValues, extraArg); + Shiboken::Object::releaseOwnership(reinterpret_cast<SbkObject*>(self)); + QApplicationConstructorEnd(self); + } +} diff --git a/PySide/QtGui/typesystem_gui_common.xml b/PySide/QtGui/typesystem_gui_common.xml index 8ba49bd20..d6bc0f2fb 100644 --- a/PySide/QtGui/typesystem_gui_common.xml +++ b/PySide/QtGui/typesystem_gui_common.xml @@ -5322,7 +5322,19 @@ <modify-function signature="QApplication(int&,char**)" access="private" /> <add-function signature="QApplication(PySequence)"> <inject-code> - QApplication_constructor(%PYSELF, args, &%0); + QApplicationConstructor(%PYSELF, %1, &%0); + </inject-code> + </add-function> + <modify-function signature="QApplication(int&,char**,bool)" access="private"/> + <add-function signature="QApplication(PySequence,bool)"> + <inject-code> + QApplicationConstructor(%PYSELF, %1, %2, &%0); + </inject-code> + </add-function> + <modify-function signature="QApplication(int&,char**,QApplication::Type)" access="private" /> + <add-function signature="QApplication(PySequence,QApplication::Type)"> + <inject-code> + QApplicationConstructor(%PYSELF, %1, %2, &%0); </inject-code> </add-function> <modify-function signature="exec()" rename="exec_" allow-thread="yes"/> @@ -5331,9 +5343,7 @@ <!-- ### Causes warnings using generator. They were kept here to avoid generation even removing Q_INTERNAL_QAPP_SRC || qdoc from #define section--> <modify-function signature="QApplication(int&,char**,int)" remove="all"/> - <modify-function signature="QApplication(int&,char**,bool)" remove="all"/> <modify-function signature="QApplication(int&,char**,bool,int)" remove="all"/> - <modify-function signature="QApplication(int&,char**,QApplication::Type)" remove="all"/> <modify-function signature="QApplication(int&,char**,QApplication::Type,int)" remove="all"/> <!-- ### --> |