void-packages/srcpkgs/python-PyQt5/patches/fix-segfaults-cura.patch

554 lines
17 KiB
Diff

--- qpy/QtQuick/qpyquick_register_type.cpp 2018-02-27 11:43:52.000000000 +0100
+++ qpy/QtQuick/qpyquick_register_type.cpp 2018-03-29 03:32:17.000000000 +0200
@@ -22,6 +22,8 @@
#include "qpyquickframebufferobject.h"
#include "qpyquickitem.h"
#include "qpyquickpainteditem.h"
+#include "qpyquickview.h"
+#include "qpyquickwindow.h"
#include "sipAPIQtQuick.h"
@@ -30,6 +32,9 @@
const QMetaObject *mo, const QByteArray &ptr_name,
const QByteArray &list_name, QQmlPrivate::RegisterType **rtp)
{
+ // Make sure the types are tested in the right order (ie. more specific
+ // types first).
+
#if QT_VERSION >= 0x050200
if (PyType_IsSubtype(py_type, sipTypeAsPyTypeObject(sipType_QQuickFramebufferObject)))
return ((*rtp = QPyQuickFramebufferObject::addType(py_type, mo, ptr_name, list_name)) ? sipErrorNone : sipErrorFail);
@@ -41,6 +46,12 @@
if (PyType_IsSubtype(py_type, sipTypeAsPyTypeObject(sipType_QQuickItem)))
return ((*rtp = QPyQuickItem::addType(py_type, mo, ptr_name, list_name)) ? sipErrorNone : sipErrorFail);
+ if (PyType_IsSubtype(py_type, sipTypeAsPyTypeObject(sipType_QQuickView)))
+ return ((*rtp = QPyQuickView::addType(py_type, mo, ptr_name, list_name)) ? sipErrorNone : sipErrorFail);
+
+ if (PyType_IsSubtype(py_type, sipTypeAsPyTypeObject(sipType_QQuickWindow)))
+ return ((*rtp = QPyQuickWindow::addType(py_type, mo, ptr_name, list_name)) ? sipErrorNone : sipErrorFail);
+
// We don't recognise the type.
return sipErrorContinue;
}
--- qpy/QtQuick/qpyquickview.cpp 1970-01-01 01:00:00.000000000 +0100
+++ qpy/QtQuick/qpyquickview.cpp 2018-03-29 03:32:17.000000000 +0200
@@ -0,0 +1,155 @@
+// This is the implementation of the QPyQuickWindow classes.
+//
+// Copyright (c) 2018 Riverbank Computing Limited <info@riverbankcomputing.com>
+//
+// This file is part of PyQt5.
+//
+// This file may be used under the terms of the GNU General Public License
+// version 3.0 as published by the Free Software Foundation and appearing in
+// the file LICENSE included in the packaging of this file. Please review the
+// following information to ensure the GNU General Public License version 3.0
+// requirements will be met: http://www.gnu.org/copyleft/gpl.html.
+//
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license. For more information contact
+// info@riverbankcomputing.com.
+//
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include <QQmlListProperty>
+
+#include "qpyquickview.h"
+
+#include "sipAPIQtQuick.h"
+
+
+// The maximum number of Python QQuickView types.
+const int NrOfQuickViewTypes = 20;
+
+// The list of registered Python types.
+static QList<PyTypeObject *> pyqt_types;
+
+// The registration data for the canned types.
+static QQmlPrivate::RegisterType canned_types[NrOfQuickViewTypes];
+
+
+#define QPYQUICKVIEW_INIT(n) \
+ case n##U: \
+ QPyQuickView##n::staticMetaObject = *mo; \
+ rt->typeId = qRegisterNormalizedMetaType<QPyQuickView##n *>(ptr_name); \
+ rt->listId = qRegisterNormalizedMetaType<QQmlListProperty<QPyQuickView##n> >(list_name); \
+ rt->objectSize = sizeof(QPyQuickView##n); \
+ rt->create = QQmlPrivate::createInto<QPyQuickView##n>; \
+ rt->metaObject = mo; \
+ rt->attachedPropertiesFunction = QQmlPrivate::attachedPropertiesFunc<QPyQuickView##n>(); \
+ rt->attachedPropertiesMetaObject = QQmlPrivate::attachedPropertiesMetaObject<QPyQuickView##n>(); \
+ rt->parserStatusCast = QQmlPrivate::StaticCastSelector<QPyQuickView##n,QQmlParserStatus>::cast(); \
+ rt->valueSourceCast = QQmlPrivate::StaticCastSelector<QPyQuickView##n,QQmlPropertyValueSource>::cast(); \
+ rt->valueInterceptorCast = QQmlPrivate::StaticCastSelector<QPyQuickView##n,QQmlPropertyValueInterceptor>::cast(); \
+ break
+
+
+// The ctor.
+QPyQuickView::QPyQuickView(QWindow *parent) : sipQQuickView(parent)
+{
+}
+
+
+// Add a new Python type and return its number.
+QQmlPrivate::RegisterType *QPyQuickView::addType(PyTypeObject *type,
+ const QMetaObject *mo, const QByteArray &ptr_name,
+ const QByteArray &list_name)
+{
+ int type_nr = pyqt_types.size();
+
+ // Check we have a spare canned type.
+ if (type_nr >= NrOfQuickViewTypes)
+ {
+ PyErr_Format(PyExc_TypeError,
+ "a maximum of %d QQuickView types may be registered with QML",
+ NrOfQuickViewTypes);
+ return 0;
+ }
+
+ pyqt_types.append(type);
+
+ QQmlPrivate::RegisterType *rt = &canned_types[type_nr];
+
+ // Initialise those members that depend on the C++ type.
+ switch (type_nr)
+ {
+ QPYQUICKVIEW_INIT(0);
+ QPYQUICKVIEW_INIT(1);
+ QPYQUICKVIEW_INIT(2);
+ QPYQUICKVIEW_INIT(3);
+ QPYQUICKVIEW_INIT(4);
+ QPYQUICKVIEW_INIT(5);
+ QPYQUICKVIEW_INIT(6);
+ QPYQUICKVIEW_INIT(7);
+ QPYQUICKVIEW_INIT(8);
+ QPYQUICKVIEW_INIT(9);
+ QPYQUICKVIEW_INIT(10);
+ QPYQUICKVIEW_INIT(11);
+ QPYQUICKVIEW_INIT(12);
+ QPYQUICKVIEW_INIT(13);
+ QPYQUICKVIEW_INIT(14);
+ QPYQUICKVIEW_INIT(15);
+ QPYQUICKVIEW_INIT(16);
+ QPYQUICKVIEW_INIT(17);
+ QPYQUICKVIEW_INIT(18);
+ QPYQUICKVIEW_INIT(19);
+ }
+
+ return rt;
+}
+
+
+// Create the Python instance.
+void QPyQuickView::createPyObject(QWindow *parent)
+{
+ SIP_BLOCK_THREADS
+
+ // Assume C++ owns everything.
+ PyObject *obj = sipConvertFromNewPyType(this, pyqt_types.at(typeNr()),
+ NULL, &sipPySelf, "D", parent, sipType_QWindow, NULL);
+
+ if (!obj)
+ pyqt5_qtquick_err_print();
+
+ SIP_UNBLOCK_THREADS
+}
+
+
+// The canned type implementations.
+#define QPYQUICKVIEW_IMPL(n) \
+QPyQuickView##n::QPyQuickView##n(QWindow *parent) : QPyQuickView(parent) \
+{ \
+ createPyObject(parent); \
+} \
+QMetaObject QPyQuickView##n::staticMetaObject
+
+
+QPYQUICKVIEW_IMPL(0);
+QPYQUICKVIEW_IMPL(1);
+QPYQUICKVIEW_IMPL(2);
+QPYQUICKVIEW_IMPL(3);
+QPYQUICKVIEW_IMPL(4);
+QPYQUICKVIEW_IMPL(5);
+QPYQUICKVIEW_IMPL(6);
+QPYQUICKVIEW_IMPL(7);
+QPYQUICKVIEW_IMPL(8);
+QPYQUICKVIEW_IMPL(9);
+QPYQUICKVIEW_IMPL(10);
+QPYQUICKVIEW_IMPL(11);
+QPYQUICKVIEW_IMPL(12);
+QPYQUICKVIEW_IMPL(13);
+QPYQUICKVIEW_IMPL(14);
+QPYQUICKVIEW_IMPL(15);
+QPYQUICKVIEW_IMPL(16);
+QPYQUICKVIEW_IMPL(17);
+QPYQUICKVIEW_IMPL(18);
+QPYQUICKVIEW_IMPL(19);
--- qpy/QtQuick/qpyquickview.h 1970-01-01 01:00:00.000000000 +0100
+++ qpy/QtQuick/qpyquickview.h 2018-03-29 03:32:17.000000000 +0200
@@ -0,0 +1,87 @@
+// This is the definition of the QPyQuickView classes.
+//
+// Copyright (c) 2018 Riverbank Computing Limited <info@riverbankcomputing.com>
+//
+// This file is part of PyQt5.
+//
+// This file may be used under the terms of the GNU General Public License
+// version 3.0 as published by the Free Software Foundation and appearing in
+// the file LICENSE included in the packaging of this file. Please review the
+// following information to ensure the GNU General Public License version 3.0
+// requirements will be met: http://www.gnu.org/copyleft/gpl.html.
+//
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license. For more information contact
+// info@riverbankcomputing.com.
+//
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYQUICKVIEW_H
+#define _QPYQUICKVIEW_H
+
+
+#include <Python.h>
+
+#include <qqmlprivate.h>
+#include <QByteArray>
+#include <QMetaObject>
+#include <QQuickView>
+
+#include "sipAPIQtQuick.h"
+
+
+class QPyQuickView : public sipQQuickView
+{
+public:
+ QPyQuickView(QWindow *parent = 0);
+
+ virtual int typeNr() const = 0;
+
+ static QQmlPrivate::RegisterType *addType(PyTypeObject *type,
+ const QMetaObject *mo, const QByteArray &ptr_name,
+ const QByteArray &list_name);
+ void createPyObject(QWindow *parent);
+
+private:
+ QPyQuickView(const QPyQuickView &);
+};
+
+
+// The canned type declarations.
+#define QPYQUICKVIEW_DECL(n) \
+class QPyQuickView##n : public QPyQuickView \
+{ \
+public: \
+ QPyQuickView##n(QWindow *parent = 0); \
+ static QMetaObject staticMetaObject; \
+ virtual int typeNr() const {return n##U;} \
+private: \
+ QPyQuickView##n(const QPyQuickView##n &); \
+}
+
+
+QPYQUICKVIEW_DECL(0);
+QPYQUICKVIEW_DECL(1);
+QPYQUICKVIEW_DECL(2);
+QPYQUICKVIEW_DECL(3);
+QPYQUICKVIEW_DECL(4);
+QPYQUICKVIEW_DECL(5);
+QPYQUICKVIEW_DECL(6);
+QPYQUICKVIEW_DECL(7);
+QPYQUICKVIEW_DECL(8);
+QPYQUICKVIEW_DECL(9);
+QPYQUICKVIEW_DECL(10);
+QPYQUICKVIEW_DECL(11);
+QPYQUICKVIEW_DECL(12);
+QPYQUICKVIEW_DECL(13);
+QPYQUICKVIEW_DECL(14);
+QPYQUICKVIEW_DECL(15);
+QPYQUICKVIEW_DECL(16);
+QPYQUICKVIEW_DECL(17);
+QPYQUICKVIEW_DECL(18);
+QPYQUICKVIEW_DECL(19);
+
+
+#endif
--- qpy/QtQuick/qpyquickwindow.cpp 1970-01-01 01:00:00.000000000 +0100
+++ qpy/QtQuick/qpyquickwindow.cpp 2018-03-29 03:32:17.000000000 +0200
@@ -0,0 +1,155 @@
+// This is the implementation of the QPyQuickWindow classes.
+//
+// Copyright (c) 2018 Riverbank Computing Limited <info@riverbankcomputing.com>
+//
+// This file is part of PyQt5.
+//
+// This file may be used under the terms of the GNU General Public License
+// version 3.0 as published by the Free Software Foundation and appearing in
+// the file LICENSE included in the packaging of this file. Please review the
+// following information to ensure the GNU General Public License version 3.0
+// requirements will be met: http://www.gnu.org/copyleft/gpl.html.
+//
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license. For more information contact
+// info@riverbankcomputing.com.
+//
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include <QQmlListProperty>
+
+#include "qpyquickwindow.h"
+
+#include "sipAPIQtQuick.h"
+
+
+// The maximum number of Python QQuickWindow types.
+const int NrOfQuickWindowTypes = 20;
+
+// The list of registered Python types.
+static QList<PyTypeObject *> pyqt_types;
+
+// The registration data for the canned types.
+static QQmlPrivate::RegisterType canned_types[NrOfQuickWindowTypes];
+
+
+#define QPYQUICKWINDOW_INIT(n) \
+ case n##U: \
+ QPyQuickWindow##n::staticMetaObject = *mo; \
+ rt->typeId = qRegisterNormalizedMetaType<QPyQuickWindow##n *>(ptr_name); \
+ rt->listId = qRegisterNormalizedMetaType<QQmlListProperty<QPyQuickWindow##n> >(list_name); \
+ rt->objectSize = sizeof(QPyQuickWindow##n); \
+ rt->create = QQmlPrivate::createInto<QPyQuickWindow##n>; \
+ rt->metaObject = mo; \
+ rt->attachedPropertiesFunction = QQmlPrivate::attachedPropertiesFunc<QPyQuickWindow##n>(); \
+ rt->attachedPropertiesMetaObject = QQmlPrivate::attachedPropertiesMetaObject<QPyQuickWindow##n>(); \
+ rt->parserStatusCast = QQmlPrivate::StaticCastSelector<QPyQuickWindow##n,QQmlParserStatus>::cast(); \
+ rt->valueSourceCast = QQmlPrivate::StaticCastSelector<QPyQuickWindow##n,QQmlPropertyValueSource>::cast(); \
+ rt->valueInterceptorCast = QQmlPrivate::StaticCastSelector<QPyQuickWindow##n,QQmlPropertyValueInterceptor>::cast(); \
+ break
+
+
+// The ctor.
+QPyQuickWindow::QPyQuickWindow(QWindow *parent) : sipQQuickWindow(parent)
+{
+}
+
+
+// Add a new Python type and return its number.
+QQmlPrivate::RegisterType *QPyQuickWindow::addType(PyTypeObject *type,
+ const QMetaObject *mo, const QByteArray &ptr_name,
+ const QByteArray &list_name)
+{
+ int type_nr = pyqt_types.size();
+
+ // Check we have a spare canned type.
+ if (type_nr >= NrOfQuickWindowTypes)
+ {
+ PyErr_Format(PyExc_TypeError,
+ "a maximum of %d QQuickWindow types may be registered with QML",
+ NrOfQuickWindowTypes);
+ return 0;
+ }
+
+ pyqt_types.append(type);
+
+ QQmlPrivate::RegisterType *rt = &canned_types[type_nr];
+
+ // Initialise those members that depend on the C++ type.
+ switch (type_nr)
+ {
+ QPYQUICKWINDOW_INIT(0);
+ QPYQUICKWINDOW_INIT(1);
+ QPYQUICKWINDOW_INIT(2);
+ QPYQUICKWINDOW_INIT(3);
+ QPYQUICKWINDOW_INIT(4);
+ QPYQUICKWINDOW_INIT(5);
+ QPYQUICKWINDOW_INIT(6);
+ QPYQUICKWINDOW_INIT(7);
+ QPYQUICKWINDOW_INIT(8);
+ QPYQUICKWINDOW_INIT(9);
+ QPYQUICKWINDOW_INIT(10);
+ QPYQUICKWINDOW_INIT(11);
+ QPYQUICKWINDOW_INIT(12);
+ QPYQUICKWINDOW_INIT(13);
+ QPYQUICKWINDOW_INIT(14);
+ QPYQUICKWINDOW_INIT(15);
+ QPYQUICKWINDOW_INIT(16);
+ QPYQUICKWINDOW_INIT(17);
+ QPYQUICKWINDOW_INIT(18);
+ QPYQUICKWINDOW_INIT(19);
+ }
+
+ return rt;
+}
+
+
+// Create the Python instance.
+void QPyQuickWindow::createPyObject(QWindow *parent)
+{
+ SIP_BLOCK_THREADS
+
+ // Assume C++ owns everything.
+ PyObject *obj = sipConvertFromNewPyType(this, pyqt_types.at(typeNr()),
+ NULL, &sipPySelf, "D", parent, sipType_QWindow, NULL);
+
+ if (!obj)
+ pyqt5_qtquick_err_print();
+
+ SIP_UNBLOCK_THREADS
+}
+
+
+// The canned type implementations.
+#define QPYQUICKWINDOW_IMPL(n) \
+QPyQuickWindow##n::QPyQuickWindow##n(QWindow *parent) : QPyQuickWindow(parent) \
+{ \
+ createPyObject(parent); \
+} \
+QMetaObject QPyQuickWindow##n::staticMetaObject
+
+
+QPYQUICKWINDOW_IMPL(0);
+QPYQUICKWINDOW_IMPL(1);
+QPYQUICKWINDOW_IMPL(2);
+QPYQUICKWINDOW_IMPL(3);
+QPYQUICKWINDOW_IMPL(4);
+QPYQUICKWINDOW_IMPL(5);
+QPYQUICKWINDOW_IMPL(6);
+QPYQUICKWINDOW_IMPL(7);
+QPYQUICKWINDOW_IMPL(8);
+QPYQUICKWINDOW_IMPL(9);
+QPYQUICKWINDOW_IMPL(10);
+QPYQUICKWINDOW_IMPL(11);
+QPYQUICKWINDOW_IMPL(12);
+QPYQUICKWINDOW_IMPL(13);
+QPYQUICKWINDOW_IMPL(14);
+QPYQUICKWINDOW_IMPL(15);
+QPYQUICKWINDOW_IMPL(16);
+QPYQUICKWINDOW_IMPL(17);
+QPYQUICKWINDOW_IMPL(18);
+QPYQUICKWINDOW_IMPL(19);
--- qpy/QtQuick/qpyquickwindow.h 1970-01-01 01:00:00.000000000 +0100
+++ qpy/QtQuick/qpyquickwindow.h 2018-03-29 03:32:17.000000000 +0200
@@ -0,0 +1,87 @@
+// This is the definition of the QPyQuickWindow classes.
+//
+// Copyright (c) 2018 Riverbank Computing Limited <info@riverbankcomputing.com>
+//
+// This file is part of PyQt5.
+//
+// This file may be used under the terms of the GNU General Public License
+// version 3.0 as published by the Free Software Foundation and appearing in
+// the file LICENSE included in the packaging of this file. Please review the
+// following information to ensure the GNU General Public License version 3.0
+// requirements will be met: http://www.gnu.org/copyleft/gpl.html.
+//
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license. For more information contact
+// info@riverbankcomputing.com.
+//
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYQUICKWINDOW_H
+#define _QPYQUICKWINDOW_H
+
+
+#include <Python.h>
+
+#include <qqmlprivate.h>
+#include <QByteArray>
+#include <QMetaObject>
+#include <QQuickWindow>
+
+#include "sipAPIQtQuick.h"
+
+
+class QPyQuickWindow : public sipQQuickWindow
+{
+public:
+ QPyQuickWindow(QWindow *parent = 0);
+
+ virtual int typeNr() const = 0;
+
+ static QQmlPrivate::RegisterType *addType(PyTypeObject *type,
+ const QMetaObject *mo, const QByteArray &ptr_name,
+ const QByteArray &list_name);
+ void createPyObject(QWindow *parent);
+
+private:
+ QPyQuickWindow(const QPyQuickWindow &);
+};
+
+
+// The canned type declarations.
+#define QPYQUICKWINDOW_DECL(n) \
+class QPyQuickWindow##n : public QPyQuickWindow \
+{ \
+public: \
+ QPyQuickWindow##n(QWindow *parent = 0); \
+ static QMetaObject staticMetaObject; \
+ virtual int typeNr() const {return n##U;} \
+private: \
+ QPyQuickWindow##n(const QPyQuickWindow##n &); \
+}
+
+
+QPYQUICKWINDOW_DECL(0);
+QPYQUICKWINDOW_DECL(1);
+QPYQUICKWINDOW_DECL(2);
+QPYQUICKWINDOW_DECL(3);
+QPYQUICKWINDOW_DECL(4);
+QPYQUICKWINDOW_DECL(5);
+QPYQUICKWINDOW_DECL(6);
+QPYQUICKWINDOW_DECL(7);
+QPYQUICKWINDOW_DECL(8);
+QPYQUICKWINDOW_DECL(9);
+QPYQUICKWINDOW_DECL(10);
+QPYQUICKWINDOW_DECL(11);
+QPYQUICKWINDOW_DECL(12);
+QPYQUICKWINDOW_DECL(13);
+QPYQUICKWINDOW_DECL(14);
+QPYQUICKWINDOW_DECL(15);
+QPYQUICKWINDOW_DECL(16);
+QPYQUICKWINDOW_DECL(17);
+QPYQUICKWINDOW_DECL(18);
+QPYQUICKWINDOW_DECL(19);
+
+
+#endif
--- sip/QtQuick/qquickview.sip 2018-02-27 11:43:53.000000000 +0100
+++ sip/QtQuick/qquickview.sip 2018-03-29 03:32:18.000000000 +0200
@@ -20,7 +20,7 @@
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-class QQuickView : QQuickWindow
+class QQuickView : QQuickWindow /ExportDerived/
{
%TypeHeaderCode
#include <qquickview.h>
--- sip/QtQuick/qquickwindow.sip 2018-02-27 11:43:53.000000000 +0100
+++ sip/QtQuick/qquickwindow.sip 2018-03-29 03:32:18.000000000 +0200
@@ -20,7 +20,7 @@
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-class QQuickWindow : QWindow
+class QQuickWindow : QWindow /ExportDerived/
{
%TypeHeaderCode
#include <qquickwindow.h>