1 // This is the initialisation support code for the QtQml module.
2 //
3 // Copyright (c) 2021 Riverbank Computing Limited <info@riverbankcomputing.com>
4 //
5 // This file is part of PyQt5.
6 //
7 // This file may be used under the terms of the GNU General Public License
8 // version 3.0 as published by the Free Software Foundation and appearing in
9 // the file LICENSE included in the packaging of this file.  Please review the
10 // following information to ensure the GNU General Public License version 3.0
11 // requirements will be met: http://www.gnu.org/copyleft/gpl.html.
12 //
13 // If you do not wish to use this file under the terms of the GPL version 3.0
14 // then you may purchase a commercial license.  For more information contact
15 // info@riverbankcomputing.com.
16 //
17 // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
18 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
19 
20 
21 #include <Python.h>
22 
23 #include "qpyqml_api.h"
24 #include "qpyqmllistproperty.h"
25 #include "qpyqmllistpropertywrapper.h"
26 #include "qpyqmlobject.h"
27 
28 #include "sipAPIQtQml.h"
29 
30 
31 // Imports from QtCore.
32 pyqt5_qtqml_err_print_t pyqt5_qtqml_err_print;
33 
34 
35 // Perform any required initialisation.
qpyqml_post_init(PyObject * module_dict)36 void qpyqml_post_init(PyObject *module_dict)
37 {
38     // QtCore imports.
39     pyqt5_qtqml_err_print = (pyqt5_qtqml_err_print_t)sipImportSymbol(
40             "pyqt5_err_print");
41     Q_ASSERT(pyqt5_qtqml_err_print);
42 
43     // Initialise the QQmlListProperty type.
44     if (!qpyqml_QQmlListProperty_init_type())
45         Py_FatalError("PyQt5.QtQml: Failed to initialise QQmlListProperty type");
46 
47     // Create the only instance and add it to the module dictionary.
48     PyObject *inst = PyObject_CallFunction(
49             (PyObject *)qpyqml_QQmlListProperty_TypeObject,
50             const_cast<char *>("s"), "QQmlListProperty<QObject>");
51 
52     if (!inst)
53         Py_FatalError("PyQt5.QtQml: Failed to create QQmlListProperty instance");
54 
55     if (PyDict_SetItemString(module_dict, "QQmlListProperty", inst) < 0)
56         Py_FatalError("PyQt5.QtQml: Failed to set QQmlListProperty instance");
57 
58     // Initialise the private QQmlListPropertyWrapper type.
59     if (!qpyqml_QQmlListPropertyWrapper_init_type())
60         Py_FatalError("PyQt5.QtQml: Failed to initialise QQmlListPropertyWrapper type");
61 
62     // Register the proxy resolver.
63     if (sipRegisterProxyResolver(sipType_QObject, QPyQmlObjectProxy::resolveProxy) < 0)
64         Py_FatalError("PyQt5.QtQml: Failed to register proxy resolver");
65 }
66