aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2021-11-24 13:28:50 +0100
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2021-11-26 16:24:29 +0100
commit13d4520d46e8fad8890ef1d718b8c2b30a2c6267 (patch)
tree953531d46e5ae745f85e6be5849cad620e2ac07c
parentca127cd9b5fe130101333da0ac5b5a09b8373dc2 (diff)
libpyside: Split up the pyside.h header
Changing something in pyside.h caused excessive recompiling of all wrappers. Try to amend the situation by splitting up the header and include only what is needed. pyside.h remains as a header including the others which will be emptied out by further changes splitting out QML functionality. [ChangeLog][PySide6] The header pyside.h has been split into smaller headers. Task-number: PYSIDE-1709 Change-Id: I89ff3d9d9bc486f194ad3ec62ed372ff0be960f2 Reviewed-by: Christian Tismer <tismer@stackless.com>
-rw-r--r--sources/pyside6/PySide6/QtCore/glue/core_snippets.cpp2
-rw-r--r--sources/pyside6/PySide6/QtCore/typesystem_core_common.xml24
-rw-r--r--sources/pyside6/PySide6/QtGui/typesystem_gui_common.xml2
-rw-r--r--sources/pyside6/PySide6/QtQml/pysideqmlregistertype.cpp1
-rw-r--r--sources/pyside6/PySide6/QtWidgets/typesystem_widgets_common.xml2
-rw-r--r--sources/pyside6/PySide6/glue/qtcore.cpp2
-rw-r--r--sources/pyside6/libpyside/CMakeLists.txt7
-rw-r--r--sources/pyside6/libpyside/class_property.cpp3
-rw-r--r--sources/pyside6/libpyside/dynamicqmetaobject.cpp2
-rw-r--r--sources/pyside6/libpyside/feature_select.cpp5
-rw-r--r--sources/pyside6/libpyside/pyside.cpp5
-rw-r--r--sources/pyside6/libpyside/pyside.h126
-rw-r--r--sources/pyside6/libpyside/pysidecleanup.h56
-rw-r--r--sources/pyside6/libpyside/pysideinit.h60
-rw-r--r--sources/pyside6/libpyside/pysideqapp.h55
-rw-r--r--sources/pyside6/libpyside/pysideqhash.h60
-rw-r--r--sources/pyside6/libpyside/pysideqmetatype.h71
-rw-r--r--sources/pyside6/libpyside/pysideqobject.h98
-rw-r--r--sources/pyside6/libpyside/pysideutils.h68
-rw-r--r--sources/pyside6/libpyside/qobjectconnect.cpp2
-rw-r--r--sources/pyside6/libpyside/signalmanager.cpp2
-rw-r--r--sources/shiboken6/generator/shiboken/cppgenerator.cpp22
22 files changed, 535 insertions, 140 deletions
diff --git a/sources/pyside6/PySide6/QtCore/glue/core_snippets.cpp b/sources/pyside6/PySide6/QtCore/glue/core_snippets.cpp
index 86cfec1f8..5af0b804a 100644
--- a/sources/pyside6/PySide6/QtCore/glue/core_snippets.cpp
+++ b/sources/pyside6/PySide6/QtCore/glue/core_snippets.cpp
@@ -38,7 +38,7 @@
****************************************************************************/
#include "core_snippets_p.h"
-#include "pyside.h"
+#include "pysideqobject.h"
#include "shiboken.h"
#include "basewrapper.h"
diff --git a/sources/pyside6/PySide6/QtCore/typesystem_core_common.xml b/sources/pyside6/PySide6/QtCore/typesystem_core_common.xml
index 346e902fd..5a3217f14 100644
--- a/sources/pyside6/PySide6/QtCore/typesystem_core_common.xml
+++ b/sources/pyside6/PySide6/QtCore/typesystem_core_common.xml
@@ -668,6 +668,9 @@
</extra-includes>
</object-type>
<value-type name="QLine" hash-function="PySide::hash">
+ <extra-includes>
+ <include file-name="pysideqhash.h" location="global"/>
+ </extra-includes>
<add-function signature="__repr__" return-type="PyObject*">
<inject-code class="target" position="beginning">
<insert-template name="repr_code">
@@ -769,6 +772,9 @@
<enum-type identified-by-value="Unspecified"/>
</value-type>
<value-type name="QDate" hash-function="PySide::hash" >
+ <extra-includes>
+ <include file-name="pysideqhash.h" location="global"/>
+ </extra-includes>
<inject-code class="native" position="beginning">
<insert-template name="pydatetime_importandcheck_function">
<replace from="$DATETIMETYPE" to="PyDate"/>
@@ -829,6 +835,9 @@
</modify-function>
</value-type>
<value-type name="QDateTime" hash-function="PySide::hash">
+ <extra-includes>
+ <include file-name="pysideqhash.h" location="global"/>
+ </extra-includes>
<enum-type name="YearRange" since="5.14"/>
<inject-code class="native" position="beginning">
<insert-template name="pydatetime_importandcheck_function">
@@ -909,6 +918,9 @@
</value-type>
<value-type name="QPoint" hash-function="PySide::hash">
+ <extra-includes>
+ <include file-name="pysideqhash.h" location="global"/>
+ </extra-includes>
<add-function signature="__repr__" return-type="PyObject*">
<inject-code class="target" position="beginning">
<insert-template name="repr_code">
@@ -976,6 +988,9 @@
<!--### -->
</value-type>
<value-type name="QRect" hash-function="PySide::hash">
+ <extra-includes>
+ <include file-name="pysideqhash.h" location="global"/>
+ </extra-includes>
<add-function signature="__repr__" return-type="PyObject*">
<inject-code class="target" position="beginning">
<insert-template name="repr_code">
@@ -1107,6 +1122,9 @@
</modify-function>
</value-type>
<value-type name="QSize" hash-function="PySide::hash">
+ <extra-includes>
+ <include file-name="pysideqhash.h" location="global"/>
+ </extra-includes>
<add-function signature="__repr__" return-type="PyObject*">
<inject-code class="target" position="beginning">
<insert-template name="repr_code">
@@ -1175,6 +1193,9 @@
</value-type>
<value-type name="QTime" hash-function="PySide::hash">
+ <extra-includes>
+ <include file-name="pysideqhash.h" location="global"/>
+ </extra-includes>
<inject-code class="native" position="beginning">
<insert-template name="pydatetime_importandcheck_function">
<replace from="$DATETIMETYPE" to="PyTime"/>
@@ -1749,6 +1770,7 @@
<enum-type name="ParsingMode"/>
<extra-includes>
<include file-name="QStringList" location="global"/>
+ <include file-name="pysideqhash.h" location="global"/>
</extra-includes>
<add-function signature="__repr__" return-type="PyObject*">
<inject-code class="target" position="beginning">
@@ -2424,6 +2446,8 @@
<extra-includes>
<include file-name="QStringList" location="global"/>
<include file-name="QTranslator" location="global"/>
+ <include file-name="pysidecleanup.h" location="global"/>
+ <include file-name="pysideqapp.h" location="global"/>
</extra-includes>
<!-- constructor documentation -->
<inject-documentation format="target" mode="append">
diff --git a/sources/pyside6/PySide6/QtGui/typesystem_gui_common.xml b/sources/pyside6/PySide6/QtGui/typesystem_gui_common.xml
index caecca7bf..4ba90f58d 100644
--- a/sources/pyside6/PySide6/QtGui/typesystem_gui_common.xml
+++ b/sources/pyside6/PySide6/QtGui/typesystem_gui_common.xml
@@ -2552,6 +2552,8 @@
<include file-name="QPalette" location="global"/>
<include file-name="QIcon" location="global"/>
<include file-name="QLocale" location="global"/>
+ <include file-name="pysideqapp.h" location="global"/>
+ <include file-name="pysidecleanup.h" location="global"/>
</extra-includes>
<modify-function signature="QGuiApplication(int&amp;,char**,int)" access="private"/>
<add-function signature="QGuiApplication(QStringList)">
diff --git a/sources/pyside6/PySide6/QtQml/pysideqmlregistertype.cpp b/sources/pyside6/PySide6/QtQml/pysideqmlregistertype.cpp
index f7f1b2375..84fec16b6 100644
--- a/sources/pyside6/PySide6/QtQml/pysideqmlregistertype.cpp
+++ b/sources/pyside6/PySide6/QtQml/pysideqmlregistertype.cpp
@@ -49,6 +49,7 @@
// pyside
#include <pyside.h>
+#include <pysideqobject.h>
#include <pyside_p.h>
#include <QtCore/QMutex>
diff --git a/sources/pyside6/PySide6/QtWidgets/typesystem_widgets_common.xml b/sources/pyside6/PySide6/QtWidgets/typesystem_widgets_common.xml
index ae309ca70..aceadd2b7 100644
--- a/sources/pyside6/PySide6/QtWidgets/typesystem_widgets_common.xml
+++ b/sources/pyside6/PySide6/QtWidgets/typesystem_widgets_common.xml
@@ -2831,6 +2831,8 @@
<include file-name="QIcon" location="global"/>
<include file-name="QLocale" location="global"/>
<include file-name="QStyle" location="global"/>
+ <include file-name="pysideqapp.h" location="global"/>
+ <include file-name="pysidecleanup.h" location="global"/>
</extra-includes>
<modify-function signature="QApplication(int&amp;,char**,int)" access="private"/>
<add-function signature="QApplication(QStringList)">
diff --git a/sources/pyside6/PySide6/glue/qtcore.cpp b/sources/pyside6/PySide6/glue/qtcore.cpp
index 692062637..4a25e435a 100644
--- a/sources/pyside6/PySide6/glue/qtcore.cpp
+++ b/sources/pyside6/PySide6/glue/qtcore.cpp
@@ -42,7 +42,7 @@
********************************************************************/
// @snippet include-pyside
-#include <pyside.h>
+#include <pysideinit.h>
#include <limits>
#include "glue/core_snippets_p.h"
// @snippet include-pyside
diff --git a/sources/pyside6/libpyside/CMakeLists.txt b/sources/pyside6/libpyside/CMakeLists.txt
index 74104263c..b51d9ae62 100644
--- a/sources/pyside6/libpyside/CMakeLists.txt
+++ b/sources/pyside6/libpyside/CMakeLists.txt
@@ -91,13 +91,20 @@ set(libpyside_HEADERS
dynamicqmetaobject.h
feature_select.h
pysideclassinfo.h
+ pysidecleanup.h
+ pysideinit.h
+ pysideqapp.h
pysideqenum.h
+ pysideqhash.h
+ pysideqmetatype.h
+ pysideqobject.h
pysidemacros.h
signalmanager.h
pyside.h
pysidestaticstrings.h
pysidemetafunction.h
pysidesignal.h
+ pysideutils.h
pysideproperty.h
pysideqflags.h
pysideweakref.h
diff --git a/sources/pyside6/libpyside/class_property.cpp b/sources/pyside6/libpyside/class_property.cpp
index 5dbb4e4f7..bf08d0448 100644
--- a/sources/pyside6/libpyside/class_property.cpp
+++ b/sources/pyside6/libpyside/class_property.cpp
@@ -37,10 +37,9 @@
**
****************************************************************************/
-#include "pyside.h"
+#include "class_property.h"
#include "pysidestaticstrings.h"
#include "feature_select.h"
-#include "class_property.h"
#include <shiboken.h>
#include <sbkstaticstrings.h>
diff --git a/sources/pyside6/libpyside/dynamicqmetaobject.cpp b/sources/pyside6/libpyside/dynamicqmetaobject.cpp
index fb8762a0a..90090018f 100644
--- a/sources/pyside6/libpyside/dynamicqmetaobject.cpp
+++ b/sources/pyside6/libpyside/dynamicqmetaobject.cpp
@@ -39,6 +39,7 @@
#include "dynamicqmetaobject.h"
#include "dynamicqmetaobject_p.h"
+#include "pysideqobject.h"
#include "pysidesignal.h"
#include "pysidesignal_p.h"
#include "pysideproperty.h"
@@ -47,7 +48,6 @@
#include "pysideqenum.h"
#include <shiboken.h>
-#include <pyside.h>
#include <QtCore/QByteArray>
#include <QtCore/QObject>
diff --git a/sources/pyside6/libpyside/feature_select.cpp b/sources/pyside6/libpyside/feature_select.cpp
index c82cccce1..f0cc4f416 100644
--- a/sources/pyside6/libpyside/feature_select.cpp
+++ b/sources/pyside6/libpyside/feature_select.cpp
@@ -38,7 +38,8 @@
****************************************************************************/
#include "feature_select.h"
-#include "pyside.h"
+#include "pysidecleanup.h"
+#include "pysideqobject.h"
#include "pysidestaticstrings.h"
#include "class_property.h"
@@ -46,6 +47,8 @@
#include <sbkfeature_base.h>
#include <signature_p.h>
+#include <QtCore/QStringList>
+
//////////////////////////////////////////////////////////////////////////////
//
// PYSIDE-1019: Support switchable extensions
diff --git a/sources/pyside6/libpyside/pyside.cpp b/sources/pyside6/libpyside/pyside.cpp
index e3e9128c2..567a5ea3a 100644
--- a/sources/pyside6/libpyside/pyside.cpp
+++ b/sources/pyside6/libpyside/pyside.cpp
@@ -38,6 +38,11 @@
****************************************************************************/
#include "pyside.h"
+#include "pysideinit.h"
+#include "pysidecleanup.h"
+#include "pysideqapp.h"
+#include "pysideqobject.h"
+#include "pysideutils.h"
#include "pyside_numpy.h"
#include "pyside_p.h"
#include "signalmanager.h"
diff --git a/sources/pyside6/libpyside/pyside.h b/sources/pyside6/libpyside/pyside.h
index 39fbef3cc..9e0f6d1a6 100644
--- a/sources/pyside6/libpyside/pyside.h
+++ b/sources/pyside6/libpyside/pyside.h
@@ -44,8 +44,10 @@
#include <pysidemacros.h>
-#include <QtCore/QMetaType>
-#include <QtCore/QHash>
+#include "pysideinit.h"
+#include "pysideqapp.h"
+#include "pysideqobject.h"
+#include "pysideutils.h"
namespace QQmlPrivate
{
@@ -55,106 +57,6 @@ struct RegisterType;
namespace PySide
{
-PYSIDE_API void init(PyObject *module);
-
-/**
- * Hash function used to enable hash on objects not supported on native Qt library which has toString function.
- */
-template<class T>
-inline Py_ssize_t hash(const T& value)
-{
- return qHash(value.toString());
-}
-
-/**
- * Fill QObject properties and do signal connections using the values found in \p kwds dictonary.
- * \param qObj PyObject fot the QObject.
- * \param metaObj QMetaObject of \p qObj.
- * \param kwds key->value dictonary.
- * \return True if everything goes well, false with a Python error setted otherwise.
- */
-PYSIDE_API bool fillQtProperties(PyObject *qObj, const QMetaObject *metaObj, PyObject *kwds);
-
-/**
-* If the type \p T was registered on Qt meta type system with Q_DECLARE_METATYPE macro, this class will initialize
-* the meta type.
-*
-* Initialize a meta type means register it on Qt meta type system, Qt itself only do this on the first call of
-* qMetaTypeId, and this is exactly what we do to init it. If we don't do that, calls to QMetaType::type("QMatrix2x2")
-* could return zero, causing QVariant to not recognize some C++ types, like QMatrix2x2.
-*/
-template<typename T, bool OK = QMetaTypeId<T>::Defined >
-struct initQtMetaType {
- initQtMetaType()
- {
- qMetaTypeId<T>();
- }
-};
-
-// Template specialization to do nothing when the type wasn't registered on Qt meta type system.
-template<typename T>
-struct initQtMetaType<T, false> {
-};
-
-PYSIDE_API void initDynamicMetaObject(PyTypeObject *type, const QMetaObject *base,
- std::size_t cppObjSize);
-PYSIDE_API void initQObjectSubType(PyTypeObject *type, PyObject *args, PyObject *kwds);
-PYSIDE_API void initQApp();
-
-/// Return the size in bytes of a type that inherits QObject.
-PYSIDE_API std::size_t getSizeOfQObject(PyTypeObject *type);
-
-/* Check if a PyTypeObject or its bases contains a QObject
- * \param pyType is the PyTypeObject to check
- * \param raiseError controls if a TypeError is raised when an object does not
- * inherits from QObject
- */
-PYSIDE_API bool isQObjectDerived(PyTypeObject *pyType, bool raiseError);
-
-/// Convenience to convert a PyObject to QObject
-PYSIDE_API QObject *convertToQObject(PyObject *object, bool raiseError);
-
-typedef void (*CleanupFunction)(void);
-
-/**
- * Register a function to be called before python die
- */
-PYSIDE_API void registerCleanupFunction(CleanupFunction func);
-PYSIDE_API void runCleanupFunctions();
-
-/**
- * Destroy a QCoreApplication taking care of destroy all instances of QObject first.
- */
-PYSIDE_API void destroyQCoreApplication();
-
-/**
- * Check for properties and signals registered on MetaObject and return these
- * \param cppSelf Is the QObject which contains the metaobject
- * \param self Python object of cppSelf
- * \param name Name of the argument which the function will try retrieve from MetaData
- * \return The Python object which contains the Data obtained in metaObject or the Python attribute related with name
- */
-PYSIDE_API PyObject *getMetaDataFromQObject(QObject *cppSelf, PyObject *self, PyObject *name);
-
-/**
- * Check if self inherits from class_name
- * \param self Python object
- * \param class_name strict with the class name
- * \return Returns true if self object inherits from class_name, otherwise returns false
- */
-PYSIDE_API bool inherits(PyTypeObject *self, const char *class_name);
-
-PYSIDE_API void *nextQObjectMemoryAddr();
-PYSIDE_API void setNextQObjectMemoryAddr(void *addr);
-
-PYSIDE_API PyObject *getWrapperForQObject(QObject *cppSelf, PyTypeObject *sbk_type);
-
-/// Return the best-matching type for a QObject (Helper for QObject.findType())
-/// \param cppSelf QObject instance
-/// \return type object
-PYSIDE_API PyTypeObject *getTypeForQObject(const QObject *cppSelf);
-
-
// Used by QtQuick module to notify QtQml that custom QtQuick items can be registered.
using QuickRegisterItemFunction =
bool (*)(PyObject *pyObj, const char *uri, int versionMajor,
@@ -164,26 +66,6 @@ using QuickRegisterItemFunction =
PYSIDE_API QuickRegisterItemFunction getQuickRegisterItemFunction();
PYSIDE_API void setQuickRegisterItemFunction(QuickRegisterItemFunction function);
-/**
- * Given A PyObject repesenting ASCII or Unicode data, returns an equivalent QString.
- */
-PYSIDE_API QString pyStringToQString(PyObject *str);
-
-/**
- * Provide an efficient, correct PathLike interface.
- */
-PYSIDE_API QString pyPathToQString(PyObject *path);
-
-/**
- * Registers a dynamic "qt.conf" file with the Qt resource system.
- *
- * This is used in a standalone build, to inform QLibraryInfo of the Qt prefix (where Qt libraries
- * are installed) so that plugins can be successfully loaded.
- */
-PYSIDE_API bool registerInternalQtConf();
-
-
} //namespace PySide
-
#endif // PYSIDE_H
diff --git a/sources/pyside6/libpyside/pysidecleanup.h b/sources/pyside6/libpyside/pysidecleanup.h
new file mode 100644
index 000000000..666740641
--- /dev/null
+++ b/sources/pyside6/libpyside/pysidecleanup.h
@@ -0,0 +1,56 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt for Python.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef PYSIDECLEANUP_H
+#define PYSIDECLEANUP_H
+
+#include <pysidemacros.h>
+
+namespace PySide
+{
+
+using CleanupFunction = void(*)();
+
+/// Register a function to be called before python dies
+PYSIDE_API void registerCleanupFunction(CleanupFunction func);
+PYSIDE_API void runCleanupFunctions();
+
+} //namespace PySide
+
+#endif // PYSIDECLEANUP_H
diff --git a/sources/pyside6/libpyside/pysideinit.h b/sources/pyside6/libpyside/pysideinit.h
new file mode 100644
index 000000000..d20a60cb7
--- /dev/null
+++ b/sources/pyside6/libpyside/pysideinit.h
@@ -0,0 +1,60 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt for Python.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef PYSIDEINIT_H
+#define PYSIDEINIT_H
+
+#include <sbkpython.h>
+
+#include <pysidemacros.h>
+
+namespace PySide
+{
+
+PYSIDE_API void init(PyObject *module);
+
+/// Registers a dynamic "qt.conf" file with the Qt resource system.
+///
+/// This is used in a standalone build, to inform QLibraryInfo of the Qt prefix
+/// (where Qt libraries are installed) so that plugins can be successfully loaded.
+PYSIDE_API bool registerInternalQtConf();
+
+} //namespace PySide
+
+#endif // PYSIDEINIT_H
diff --git a/sources/pyside6/libpyside/pysideqapp.h b/sources/pyside6/libpyside/pysideqapp.h
new file mode 100644
index 000000000..2c2e116da
--- /dev/null
+++ b/sources/pyside6/libpyside/pysideqapp.h
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt for Python.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef PYSIDEQAPP_H
+#define PYSIDEQAPP_H
+
+#include <pysidemacros.h>
+
+namespace PySide
+{
+
+PYSIDE_API void initQApp();
+
+/// Destroy a QCoreApplication taking care of destroy all instances of QObject first.
+PYSIDE_API void destroyQCoreApplication();
+
+} //namespace PySide
+
+#endif // PYSIDEQPP_H
diff --git a/sources/pyside6/libpyside/pysideqhash.h b/sources/pyside6/libpyside/pysideqhash.h
new file mode 100644
index 000000000..d7f82c598
--- /dev/null
+++ b/sources/pyside6/libpyside/pysideqhash.h
@@ -0,0 +1,60 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt for Python.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef PYSIDEQHASH_H
+#define PYSIDEQHASH_H
+
+#include <sbkpython.h>
+
+#include <QtCore/QHash>
+
+namespace PySide
+{
+
+/// Hash function used to enable hash on objects not supported by the native Qt
+/// library which have a toString() function.
+template<class T>
+inline Py_ssize_t hash(const T& value)
+{
+ return qHash(value.toString());
+}
+
+} //namespace PySide
+
+#endif // PYSIDEQHASH_H
diff --git a/sources/pyside6/libpyside/pysideqmetatype.h b/sources/pyside6/libpyside/pysideqmetatype.h
new file mode 100644
index 000000000..020225da9
--- /dev/null
+++ b/sources/pyside6/libpyside/pysideqmetatype.h
@@ -0,0 +1,71 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt for Python.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef PYSIDEQMETATYPE_H
+#define PYSIDEQMETATYPE_H
+
+#include <QtCore/QMetaType>
+
+namespace PySide
+{
+
+/// If the type \p T was registered on Qt meta type system with Q_DECLARE_METATYPE macro,
+/// this class will initialize the meta type.
+///
+/// Initialize a meta type means register it on Qt meta type system, Qt itself only do this
+/// on the first call of qMetaTypeId, and this is exactly what we do to init it. If we don't
+/// do that, calls to QMetaType::type("QMatrix2x2") could return zero, causing QVariant to
+/// not recognize some C++ types, like QMatrix2x2.
+
+template<typename T, bool OK = QMetaTypeId<T>::Defined >
+struct initQtMetaType {
+ initQtMetaType()
+ {
+ qMetaTypeId<T>();
+ }
+};
+
+// Template specialization to do nothing when the type wasn't registered on Qt meta type system.
+template<typename T>
+struct initQtMetaType<T, false> {
+};
+
+} //namespace PySide
+
+#endif // PYSIDEQMETATYPE_H
diff --git a/sources/pyside6/libpyside/pysideqobject.h b/sources/pyside6/libpyside/pysideqobject.h
new file mode 100644
index 000000000..19e603bb7
--- /dev/null
+++ b/sources/pyside6/libpyside/pysideqobject.h
@@ -0,0 +1,98 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt for Python.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef PYSIDEQOBJECT_H
+#define PYSIDEQOBJECT_H
+
+#include <sbkpython.h>
+
+#include <pysidemacros.h>
+
+#include <QtCore/QtGlobal>
+
+QT_FORWARD_DECLARE_CLASS(QObject)
+QT_FORWARD_DECLARE_STRUCT(QMetaObject)
+
+namespace PySide
+{
+
+/// Fill QObject properties and do signal connections using the values found in \p kwds dictionary.
+/// \param qObj PyObject fot the QObject.
+/// \param metaObj QMetaObject of \p qObj.
+/// \param kwds key->value dictonary.
+/// \return True if everything goes well, false with a Python error set otherwise.
+PYSIDE_API bool fillQtProperties(PyObject *qObj, const QMetaObject *metaObj, PyObject *kwds);
+
+PYSIDE_API void initDynamicMetaObject(PyTypeObject *type, const QMetaObject *base,
+ std::size_t cppObjSize);
+PYSIDE_API void initQObjectSubType(PyTypeObject *type, PyObject *args, PyObject *kwds);
+
+/// Return the size in bytes of a type that inherits QObject.
+PYSIDE_API std::size_t getSizeOfQObject(PyTypeObject *type);
+
+/// Check if a PyTypeObject or its bases contains a QObject
+/// \param pyType is the PyTypeObject to check
+/// \param raiseError controls if a TypeError is raised when an object does not
+/// inherit QObject
+PYSIDE_API bool isQObjectDerived(PyTypeObject *pyType, bool raiseError);
+
+/// Convenience to convert a PyObject to QObject
+PYSIDE_API QObject *convertToQObject(PyObject *object, bool raiseError);
+
+/// Check for properties and signals registered on MetaObject and return these
+/// \param cppSelf Is the QObject which contains the metaobject
+/// \param self Python object of cppSelf
+/// \param name Name of the argument which the function will try retrieve from MetaData
+/// \return The Python object which contains the Data obtained in metaObject or the Python
+/// attribute related with name
+PYSIDE_API PyObject *getMetaDataFromQObject(QObject *cppSelf, PyObject *self, PyObject *name);
+
+PYSIDE_API void *nextQObjectMemoryAddr();
+PYSIDE_API void setNextQObjectMemoryAddr(void *addr);
+
+PYSIDE_API PyObject *getWrapperForQObject(QObject *cppSelf, PyTypeObject *sbk_type);
+
+/// Return the best-matching type for a QObject (Helper for QObject.findType())
+/// \param cppSelf QObject instance
+/// \return type object
+PYSIDE_API PyTypeObject *getTypeForQObject(const QObject *cppSelf);
+
+} //namespace PySide
+
+#endif // PYSIDEQOBJECT_H
diff --git a/sources/pyside6/libpyside/pysideutils.h b/sources/pyside6/libpyside/pysideutils.h
new file mode 100644
index 000000000..570fbe952
--- /dev/null
+++ b/sources/pyside6/libpyside/pysideutils.h
@@ -0,0 +1,68 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt for Python.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef PYSIDEUTILS_H
+#define PYSIDEUTILS_H
+
+#include <sbkpython.h>
+
+#include <pysidemacros.h>
+
+#include <QtCore/QtGlobal>
+
+QT_FORWARD_DECLARE_CLASS(QString)
+
+namespace PySide
+{
+
+/// Check if self inherits from class_name
+/// \param self Python object
+/// \param class_name strict with the class name
+/// \return Returns true if self object inherits from class_name, otherwise returns false
+PYSIDE_API bool inherits(PyTypeObject *self, const char *class_name);
+
+/// Given A PyObject repesenting ASCII or Unicode data, returns an equivalent QString.
+PYSIDE_API QString pyStringToQString(PyObject *str);
+
+/// Provide an efficient, correct PathLike interface.
+PYSIDE_API QString pyPathToQString(PyObject *path);
+
+} //namespace PySide
+
+#endif // PYSIDESTRING_H
diff --git a/sources/pyside6/libpyside/qobjectconnect.cpp b/sources/pyside6/libpyside/qobjectconnect.cpp
index fb9660e0a..bad0589a2 100644
--- a/sources/pyside6/libpyside/qobjectconnect.cpp
+++ b/sources/pyside6/libpyside/qobjectconnect.cpp
@@ -38,7 +38,7 @@
****************************************************************************/
#include "qobjectconnect.h"
-#include "pyside.h"
+#include "pysideqobject.h"
#include "pysidesignal.h"
#include "signalmanager.h"
diff --git a/sources/pyside6/libpyside/signalmanager.cpp b/sources/pyside6/libpyside/signalmanager.cpp
index f85a63b31..c1147bb3c 100644
--- a/sources/pyside6/libpyside/signalmanager.cpp
+++ b/sources/pyside6/libpyside/signalmanager.cpp
@@ -42,7 +42,7 @@
#include "pysidesignal.h"
#include "pysideproperty.h"
#include "pysideproperty_p.h"
-#include "pyside.h"
+#include "pysidecleanup.h"
#include "pyside_p.h"
#include "dynamicqmetaobject.h"
#include "pysidemetafunction_p.h"
diff --git a/sources/shiboken6/generator/shiboken/cppgenerator.cpp b/sources/shiboken6/generator/shiboken/cppgenerator.cpp
index 4370556ab..eb48b1b10 100644
--- a/sources/shiboken6/generator/shiboken/cppgenerator.cpp
+++ b/sources/shiboken6/generator/shiboken/cppgenerator.cpp
@@ -353,7 +353,7 @@ static const char includeQDebug[] =
"#ifndef QT_NO_VERSION_TAGGING\n"
"# define QT_NO_VERSION_TAGGING\n"
"#endif\n"
-"#include <QDebug>\n";
+"#include <QtCore/QDebug>\n";
static QString chopType(QString s)
{
@@ -428,19 +428,21 @@ void CppGenerator::generateClass(TextStream &s, const GeneratorContext &classCon
s << "#include <shiboken.h>\n";
if (usePySideExtensions()) {
s << includeQDebug;
- s << "#include <pysidesignal.h>\n"
- << "#include <pysideproperty.h>\n"
- << "#include <pyside.h>\n"
- << "#include <pysideqenum.h>\n"
+ if (metaClass->isQObject()) {
+ s << "#include <pysideqobject.h>\n"
+ << "#include <pysidesignal.h>\n"
+ << "#include <pysideproperty.h>\n"
+ << "#include <signalmanager.h>\n"
+ << "#include <pysidemetafunction.h>\n";
+ }
+ s << "#include <pysideqenum.h>\n"
+ << "#include <pysideqmetatype.h>\n"
+ << "#include <pysideutils.h>\n"
<< "#include <feature_select.h>\n"
<< "QT_WARNING_DISABLE_DEPRECATED\n\n";
}
s << "#include <typeinfo>\n";
- if (usePySideExtensions() && metaClass->isQObject()) {
- s << "#include <signalmanager.h>\n";
- s << "#include <pysidemetafunction.h>\n";
- }
// The multiple inheritance initialization function
// needs the 'set' class from C++ STL.
@@ -6313,7 +6315,7 @@ bool CppGenerator::finishGeneration()
if (usePySideExtensions()) {
s << includeQDebug;
- s << R"(#include <pyside.h>
+ s << R"(#include <pysidecleanup.h>
#include <pysideqenum.h>
#include <feature_select.h>
)";