aboutsummaryrefslogtreecommitdiffstats
path: root/PySide
diff options
context:
space:
mode:
authorHugo Parente Lima <hugo.pl@gmail.com>2011-06-10 18:35:31 -0300
committerHugo Parente Lima <hugo.pl@gmail.com>2012-03-08 16:54:29 -0300
commit590abafc54206e458066f5632accda94e37f5edf (patch)
tree6e7fb1ec6c820db8d85b1c186f7194fc93f53061 /PySide
parentb66f8a789a55d07ad9fec0d9c40893ecf3952157 (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.cpp36
-rw-r--r--PySide/QtGui/typesystem_gui_common.xml16
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&amp;,char**)" access="private" />
<add-function signature="QApplication(PySequence)">
<inject-code>
- QApplication_constructor(%PYSELF, args, &amp;%0);
+ QApplicationConstructor(%PYSELF, %1, &amp;%0);
+ </inject-code>
+ </add-function>
+ <modify-function signature="QApplication(int&amp;,char**,bool)" access="private"/>
+ <add-function signature="QApplication(PySequence,bool)">
+ <inject-code>
+ QApplicationConstructor(%PYSELF, %1, %2, &amp;%0);
+ </inject-code>
+ </add-function>
+ <modify-function signature="QApplication(int&amp;,char**,QApplication::Type)" access="private" />
+ <add-function signature="QApplication(PySequence,QApplication::Type)">
+ <inject-code>
+ QApplicationConstructor(%PYSELF, %1, %2, &amp;%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&amp;,char**,int)" remove="all"/>
- <modify-function signature="QApplication(int&amp;,char**,bool)" remove="all"/>
<modify-function signature="QApplication(int&amp;,char**,bool,int)" remove="all"/>
- <modify-function signature="QApplication(int&amp;,char**,QApplication::Type)" remove="all"/>
<modify-function signature="QApplication(int&amp;,char**,QApplication::Type,int)" remove="all"/>
<!-- ### -->