[neon/forks/pyqt5/Neon/release] /: New upstream version 5.15.10+dfsg

Dmitry Shachnev null at kde.org
Mon Sep 2 12:05:42 BST 2024


Git commit 1c0824a22a5f2d351381edc840385b65b7be7fd7 by Dmitry Shachnev.
Committed on 26/10/2023 at 10:14.
Pushed by jriddell into branch 'Neon/release'.

New upstream version 5.15.10+dfsg

M  +108  -0    ChangeLog
M  +7    -0    NEWS
M  +2    -2    PKG-INFO
M  +1    -1    configure.py
M  +3    -2    project.py
M  +1    -1    pyproject.toml
M  +1    -1    qpy/QtCore/qpycore_qt_conf.cpp
M  +15   -5    qpy/QtCore/qpycore_types.cpp
M  +20   -12   qpy/pyrcc/rcc.cpp
M  +9    -1    sip/QtCore/qcoreapplication.sip
M  +5    -0    sip/QtCore/qcoreevent.sip
M  +3    -3    sip/QtCore/qdeadlinetimer.sip
M  +2    -2    sip/QtCore/qglobal.sip
M  +9    -9    sip/QtCore/qobject.sip
M  +1    -1    sip/QtCore/qstring.sip
M  +14   -14   sip/QtGui/qpainter.sip
M  +2    -2    sip/QtGui/qpolygon.sip

https://invent.kde.org/neon/forks/pyqt5/-/commit/1c0824a22a5f2d351381edc840385b65b7be7fd7

diff --git a/ChangeLog b/ChangeLog
index a5c3fa2d..5ceeefec 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,111 @@
+2023-10-10  Phil Thompson  <phil at riverbankcomputing.com>
+
+	* NEWS, qpy/QtCore/qpycore_types.cpp:
+	Removed a compiler warning message.
+	[a92a518d62a1] [5.15.10] <5.15-maint>
+
+2023-10-08  Phil Thompson  <phil at riverbankcomputing.com>
+
+	* NEWS, lib/project.py, qpy/QtCore/qpycore_types.cpp:
+	Properly fix the use of PyType_GetDict(). ABI v12.13 is now needed.
+	[4a48fab832b8] <5.15-maint>
+
+2023-10-07  Phil Thompson  <phil at riverbankcomputing.com>
+
+	* NEWS, qpy/QtCore/qpycore_types.cpp:
+	Fixed the memory leak related to sipPyTypeDict() and Python v3.12.
+	[3744224dd080] <5.15-maint>
+
+2023-09-22  Phil Thompson  <phil at riverbankcomputing.com>
+
+	* NEWS, PyQt5.msp:
+	Disabled the automatic generation of the type hint for pyqtSlot.
+	[aec75fafb7c3] <5.15-maint>
+
+2023-08-27  Phil Thompson  <phil at riverbankcomputing.com>
+
+	* NEWS, qpy/QtCore/qpycore_qt_conf.cpp:
+	Use Latin-1 rather than the local encoding to write the embedded
+	qt.conf file.
+	[26eb32db0a3c] <5.15-maint>
+
+2023-08-26  Phil Thompson  <phil at riverbankcomputing.com>
+
+	* NEWS, test/tests/misc/test_pickle.py:
+	Fixed some legacy unittest calls removed in Python v3.12.
+	[ffdbdfee5b60] <5.15-maint>
+
+2023-07-27  Phil Thompson  <phil at riverbankcomputing.com>
+
+	* NEWS, PyQt5.msp:
+	Really fix the QString/None regression.
+	[219301a7e51e] <5.15-maint>
+
+2023-07-21  Phil Thompson  <phil at riverbankcomputing.com>
+
+	* PyQt5.msp:
+	Fixed a regression in using None as a QString.
+	[01d95f9ff234] <5.15-maint>
+
+2023-07-16  Phil Thompson  <phil at riverbankcomputing.com>
+
+	* PyQt5.msp:
+	Fixes from an apparently rogue metasip scan.
+	[ddceca16b27e] <5.15-maint>
+
+	* NEWS, PyQt5.msp:
+	Fixed the type hints for all ellipsis arguments.
+	[60eaade98d69] <5.15-maint>
+
+2023-07-14  Phil Thompson  <phil at riverbankcomputing.com>
+
+	* NEWS, PyQt5.msp:
+	Fixed the type hints for QString.
+	[70febd346bbd] <5.15-maint>
+
+2023-07-12  Phil Thompson  <phil at riverbankcomputing.com>
+
+	* NEWS, PyQt5.msp:
+	Fixed the type hints for QObject.findChild() and
+	QObject.findChildren().
+	[87f470a9e300] <5.15-maint>
+
+2023-07-09  Phil Thompson  <phil at riverbankcomputing.com>
+
+	* NEWS, qpy/pyrcc/rcc.cpp:
+	Fixed pyrcc for reproducable builds.
+	[950ea5e7f6a2] <5.15-maint>
+
+2023-07-05  Phil Thompson  <phil at riverbankcomputing.com>
+
+	* NEWS, PyQt5.msp:
+	Fixed the type hints for PYQT_SLOT and pyqtSlot().
+	[d038fb017ee2] <5.15-maint>
+
+2023-06-08  Phil Thompson  <phil at riverbankcomputing.com>
+
+	* NEWS, PyQt5.msp, lib/project.py:
+	Added the missing QEvent.Type.EnterEditFocus and
+	QEvent.Type.LeaveEditFocus enum members.
+	[40fc079cfca7] <5.15-maint>
+
+	* NEWS, PyQt5.msp:
+	Added the missing QEvent.Type.NativeGesture member (Qt v5.2 and
+	later).
+	[dc33dcf9e485] <5.15-maint>
+
+2023-05-21  Phil Thompson  <phil at riverbankcomputing.com>
+
+	* NEWS, PyQt5.msp:
+	Fixed the QDeadlineTimer ctors.
+	[684e8e23899f] <5.15-maint>
+
+2023-02-02  Phil Thompson  <phil at riverbankcomputing.com>
+
+	* .hgtags:
+	Added tag 5.15.9 for changeset c8aba8cdb7c0
+	[af0bcef92906] <5.15-maint>
+
 2023-01-31  Phil Thompson  <phil at riverbankcomputing.com>
 
 	* NEWS, lib/project.py:
diff --git a/NEWS b/NEWS
index 82cd2708..7eaa0398 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,10 @@
+v5.15.10 10th October 2023
+  - Added the missing QEvent.Type.NativeGesture member (Qt v5.2 and later).
+  - Added the missing QEvent.Type.EnterEditFocus and QEvent.Type.LeaveEditFocus
+    members.
+  - PyQt5-sip v12.13 is now required for Python v3.12 support.
+  - Bug fixes.
+
 v5.15.9 31st January 2023
   - Bug fixes.
 
diff --git a/PKG-INFO b/PKG-INFO
index bc18abf8..0f5e222e 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,13 +1,13 @@
 Metadata-Version: 2.1
 Name: PyQt5
-Version: 5.15.9
+Version: 5.15.10
 Requires-Python: >=3.7
 Summary: Python bindings for the Qt cross platform application toolkit
 Home-Page: https://www.riverbankcomputing.com/software/pyqt/
 Author: Riverbank Computing Limited
 Author-Email: info at riverbankcomputing.com
 License: GPL v3
-Requires-Dist: PyQt5-sip (>=12.11, <13)
+Requires-Dist: PyQt5-sip (>=12.13, <13)
 
 PyQt5 - Comprehensive Python Bindings for Qt v5
 ===============================================
diff --git a/configure.py b/configure.py
index db57056a..90011d35 100644
--- a/configure.py
+++ b/configure.py
@@ -28,7 +28,7 @@ import sys
 
 
 # Initialise the constants.
-PYQT_VERSION_STR = "5.15.9"
+PYQT_VERSION_STR = "5.15.10"
 SIP_MIN_VERSION = '@MinimumSipVersion@'
 
 
diff --git a/project.py b/project.py
index d46a2e71..ef78e907 100644
--- a/project.py
+++ b/project.py
@@ -28,7 +28,7 @@ from sipbuild import (Buildable, BuildableModule, Installable, Option,
 
 
 # The minimum sip module ABI version needed.
-ABI_VERSION = '12.11'
+ABI_VERSION = '12.13'
 
 
 class PyQt(PyQtProject):
@@ -588,7 +588,8 @@ class QtCore(PyQtBindings):
     def __init__(self, project):
         """ Initialise the bindings. """
 
-        super().__init__(project, 'QtCore', qmake_QT=['-gui'])
+        super().__init__(project, 'QtCore', qmake_QT=['-gui'],
+                define_macros=['QT_KEYPAD_NAVIGATION'])
 
     def generate(self):
         """ Generate the bindings source code and return the corresponding
diff --git a/pyproject.toml b/pyproject.toml
index 6f03dd9d..417796fb 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -6,7 +6,7 @@ build-backend = "sipbuild.api"
 # Specify the PEP 566 metadata for the project.
 [tool.sip.metadata]
 name = "PyQt5"
-version = "5.15.9"
+version = "5.15.10"
 summary = "Python bindings for the Qt cross platform application toolkit"
 home-page = "https://www.riverbankcomputing.com/software/pyqt/"
 author = "Riverbank Computing Limited"
diff --git a/qpy/QtCore/qpycore_qt_conf.cpp b/qpy/QtCore/qpycore_qt_conf.cpp
index ee69db20..1dfa33cd 100644
--- a/qpy/QtCore/qpycore_qt_conf.cpp
+++ b/qpy/QtCore/qpycore_qt_conf.cpp
@@ -95,7 +95,7 @@ bool qpycore_qt_conf()
     if (QFileInfo(qt_dir_name).exists())
     {
         // Get the prefix path with non-native separators.
-        static QByteArray qt_conf = qt_dir_name.toLocal8Bit();
+        static QByteArray qt_conf = qt_dir_name.toLatin1();
 
         qt_conf.prepend("[Paths]\nPrefix = ");
         qt_conf.append("\n");
diff --git a/qpy/QtCore/qpycore_types.cpp b/qpy/QtCore/qpycore_types.cpp
index 8fe354d7..bf7f9a4a 100644
--- a/qpy/QtCore/qpycore_types.cpp
+++ b/qpy/QtCore/qpycore_types.cpp
@@ -186,7 +186,7 @@ static qpycore_metaobject *create_dynamic_metaobject(sipWrapperType *wt)
     // Add the properties to the meta-object.
     QMapIterator<uint, PropertyData> it(pprops);
 
-    for (int p = 0; it.hasNext(); ++p)
+    while (it.hasNext())
     {
         it.next();
 
@@ -384,10 +384,12 @@ static int trawl_type(PyTypeObject *pytype, qpycore_metaobject *qo,
         QMetaObjectBuilder &builder, QList<const qpycore_pyqtSignal *> &psigs,
         QMap<uint, PropertyData> &pprops)
 {
+    int rc = 0;
     Py_ssize_t pos = 0;
     PyObject *key, *value, *dict;
 
-    dict = sipPyTypeDict(pytype);
+    if ((dict = sipPyTypeDictRef(pytype)) == NULL)
+        return -1;
 
     while (PyDict_Next(dict, &pos, &key, &value))
     {
@@ -445,7 +447,10 @@ static int trawl_type(PyTypeObject *pytype, qpycore_metaobject *qo,
                 // It is a property.
 
                 if (!ascii_key)
-                    return -1;
+                {
+                    rc = -1;
+                    break;
+                }
 
                 Py_INCREF(value);
 
@@ -466,7 +471,10 @@ static int trawl_type(PyTypeObject *pytype, qpycore_metaobject *qo,
                 // It is a signal.
 
                 if (!ascii_key)
-                    return -1;
+                {
+                    rc = -1;
+                    break;
+                }
 
                 qpycore_pyqtSignal *ps = (qpycore_pyqtSignal *)value;
 
@@ -490,7 +498,9 @@ static int trawl_type(PyTypeObject *pytype, qpycore_metaobject *qo,
         }
     }
 
-    return 0;
+    Py_DECREF(dict);
+
+    return rc;
 }
 
 
diff --git a/qpy/pyrcc/rcc.cpp b/qpy/pyrcc/rcc.cpp
index cb4a9187..89132443 100644
--- a/qpy/pyrcc/rcc.cpp
+++ b/qpy/pyrcc/rcc.cpp
@@ -1,6 +1,6 @@
 /****************************************************************************
 **
-** Copyright (c) 2018 Riverbank Computing Limited. All rights reserved.
+** Copyright (c) 2023 Riverbank Computing Limited. All rights reserved.
 ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
 ** Contact: http://www.qt-project.org/legal
 **
@@ -442,6 +442,11 @@ RCCResourceLibrary::writeHeader(FILE *out)
     return true;
 }
 
+static bool qt_rcc_compare_hash(const RCCFileInfo *left, const RCCFileInfo *right)
+{
+    return qt_hash(left->name) < qt_hash(right->name);
+}
+
 bool
 RCCResourceLibrary::writeDataBlobs(FILE *out)
 {
@@ -455,9 +460,13 @@ RCCResourceLibrary::writeDataBlobs(FILE *out)
     qint64 offset = 0;
     while(!pending.isEmpty()) {
         RCCFileInfo *file = pending.pop();
-        for(QHash<QString, RCCFileInfo*>::iterator it = file->children.begin();
-            it != file->children.end(); ++it) {
-            RCCFileInfo *child = it.value();
+
+        // Sort deterministically for reproducible builds.
+        QList<RCCFileInfo*> children = file->children.values();
+        qSort(children.begin(), children.end(), qt_rcc_compare_hash);
+
+        for(int i = 0; i < children.size(); ++i) {
+            RCCFileInfo *child = children.at(i);
             if(child->flags & RCCFileInfo::Directory)
                 pending.push(child);
             else
@@ -483,9 +492,13 @@ RCCResourceLibrary::writeDataNames(FILE *out)
     qint64 offset = 0;
     while(!pending.isEmpty()) {
         RCCFileInfo *file = pending.pop();
-        for(QHash<QString, RCCFileInfo*>::iterator it = file->children.begin();
-            it != file->children.end(); ++it) {
-            RCCFileInfo *child = it.value();
+
+        // Sort deterministically for reproducible builds.
+        QList<RCCFileInfo*> children = file->children.values();
+        qSort(children.begin(), children.end(), qt_rcc_compare_hash);
+
+        for(int i = 0; i < children.size(); ++i) {
+            RCCFileInfo *child = children.at(i);
             if(child->flags & RCCFileInfo::Directory)
                 pending.push(child);
             if(names.contains(child->name)) {
@@ -500,11 +513,6 @@ RCCResourceLibrary::writeDataNames(FILE *out)
     return true;
 }
 
-static bool qt_rcc_compare_hash(const RCCFileInfo *left, const RCCFileInfo *right)
-{
-    return qt_hash(left->name) < qt_hash(right->name);
-}
-
 bool RCCResourceLibrary::writeDataStructure(FILE *out, int version)
 {
     fprintf(out, "qt_resource_struct_v%d = b\"\\\n", version);
diff --git a/sip/QtCore/qcoreapplication.sip b/sip/QtCore/qcoreapplication.sip
index adb0945a..6956e1cf 100644
--- a/sip/QtCore/qcoreapplication.sip
+++ b/sip/QtCore/qcoreapplication.sip
@@ -320,7 +320,7 @@ import datetime
 
 # Convenient type aliases.
 PYQT_SIGNAL = typing.Union[QtCore.pyqtSignal, QtCore.pyqtBoundSignal]
-PYQT_SLOT = typing.Union[typing.Callable[..., None], QtCore.pyqtBoundSignal]
+PYQT_SLOT = typing.Union[typing.Callable[..., Any], QtCore.pyqtBoundSignal]
 %End
 
 %TypeHintCode
@@ -363,6 +363,14 @@ class pyqtBoundSignal:
     def emit(self, *args: typing.Any) -> None: ...
 
 
+FuncT = typing.TypeVar('FuncT', bound=typing.Callable)
+def pyqtSlot(*types, name: typing.Optional[str] = ..., result: typing.Optional[str] = ...) -> typing.Callable[[FuncT], FuncT]: ...
+
+
+# For QObject.findChild() and QObject.findChildren().
+QObjectT = typing.TypeVar('QObjectT', bound=QObject)
+
+
 # Convenient type aliases.
 PYQT_SIGNAL = typing.Union[pyqtSignal, pyqtBoundSignal]
 PYQT_SLOT = typing.Union[typing.Callable[..., None], pyqtBoundSignal]
diff --git a/sip/QtCore/qcoreevent.sip b/sip/QtCore/qcoreevent.sip
index 403642f2..a4ed501f 100644
--- a/sip/QtCore/qcoreevent.sip
+++ b/sip/QtCore/qcoreevent.sip
@@ -188,6 +188,9 @@ public:
         TouchBegin,
         TouchUpdate,
         TouchEnd,
+%If (Qt_5_2_0 -)
+        NativeGesture,
+%End
         RequestSoftwareInputPanel,
         CloseSoftwareInputPanel,
         WinIdChange,
@@ -213,6 +216,8 @@ public:
 %If (Qt_5_9_0 -)
         TabletTrackingChange,
 %End
+        EnterEditFocus,
+        LeaveEditFocus,
         User,
         MaxUser,
     };
diff --git a/sip/QtCore/qdeadlinetimer.sip b/sip/QtCore/qdeadlinetimer.sip
index 5c4e88c8..09d3fc73 100644
--- a/sip/QtCore/qdeadlinetimer.sip
+++ b/sip/QtCore/qdeadlinetimer.sip
@@ -34,9 +34,9 @@ public:
         Forever,
     };
 
-    QDeadlineTimer(Qt::TimerType type = Qt::CoarseTimer);
-    QDeadlineTimer(QDeadlineTimer::ForeverConstant, Qt::TimerType type = Qt::CoarseTimer);
-    QDeadlineTimer(qint64 msecs, Qt::TimerType type = Qt::CoarseTimer);
+    QDeadlineTimer(Qt::TimerType type /Constrained/ = Qt::CoarseTimer);
+    QDeadlineTimer(QDeadlineTimer::ForeverConstant /Constrained/, Qt::TimerType type /Constrained/ = Qt::CoarseTimer);
+    QDeadlineTimer(qint64 msecs, Qt::TimerType type /Constrained/ = Qt::CoarseTimer);
     void swap(QDeadlineTimer &other /Constrained/);
     bool isForever() const;
     bool hasExpired() const;
diff --git a/sip/QtCore/qglobal.sip b/sip/QtCore/qglobal.sip
index 599c50c2..b1a4f70f 100644
--- a/sip/QtCore/qglobal.sip
+++ b/sip/QtCore/qglobal.sip
@@ -29,8 +29,8 @@ int PYQT_VERSION;
 const char *PYQT_VERSION_STR;
 
 %ModuleCode
-static int PYQT_VERSION = 0x050f09;
-static const char *PYQT_VERSION_STR = "5.15.9";
+static int PYQT_VERSION = 0x050f0a;
+static const char *PYQT_VERSION_STR = "5.15.10";
 %End
 const int QT_VERSION;
 const char *QT_VERSION_STR;
diff --git a/sip/QtCore/qobject.sip b/sip/QtCore/qobject.sip
index e4efe966..942b0f64 100644
--- a/sip/QtCore/qobject.sip
+++ b/sip/QtCore/qobject.sip
@@ -459,7 +459,7 @@ callable.
         sipRes = new QString(QCoreApplication::translate(sipPyTypeName(Py_TYPE(sipSelf)), a0, a1, a2));
 %End
 
-    SIP_PYOBJECT findChild(SIP_PYTYPE type, const QString &name = QString(), Qt::FindChildOptions options = Qt::FindChildrenRecursively) const /TypeHint="QObject"/;
+    SIP_PYOBJECT findChild(SIP_PYTYPE type /TypeHint="Type[QObjectT]"/, const QString &name = QString(), Qt::FindChildOptions options = Qt::FindChildrenRecursively) const /TypeHint="QObjectT"/;
 %MethodCode
         sipRes = qtcore_FindChild(sipCpp, qtcore_type_to_tuple(a0), *a1, *a2);
         
@@ -467,7 +467,7 @@ callable.
             sipIsErr = 1;
 %End
 
-    SIP_PYOBJECT findChild(SIP_PYTUPLE types /TypeHintValue="()"/, const QString &name = QString(), Qt::FindChildOptions options = Qt::FindChildrenRecursively) const /TypeHint="QObject"/;
+    SIP_PYOBJECT findChild(SIP_PYTUPLE types /TypeHint="Tuple[Type[QObjectT], ...]", TypeHintValue="()"/, const QString &name = QString(), Qt::FindChildOptions options = Qt::FindChildrenRecursively) const /TypeHint="QObjectT"/;
 %MethodCode
         sipRes = qtcore_FindChild(sipCpp, qtcore_check_tuple_types(a0), *a1, *a2);
         
@@ -475,7 +475,7 @@ callable.
             sipIsErr = 1;
 %End
 
-    SIP_PYLIST findChildren(SIP_PYTYPE type, const QString &name = QString(), Qt::FindChildOptions options = Qt::FindChildrenRecursively) const /TypeHint="List[QObject]"/;
+    SIP_PYLIST findChildren(SIP_PYTYPE type /TypeHint="Type[QObjectT]"/, const QString &name = QString(), Qt::FindChildOptions options = Qt::FindChildrenRecursively) const /TypeHint="List[QObjectT]"/;
 %MethodCode
         sipRes = qtcore_FindChildren(sipCpp, qtcore_type_to_tuple(a0), *a1, *a2);
         
@@ -483,7 +483,7 @@ callable.
             sipIsErr = 1;
 %End
 
-    SIP_PYLIST findChildren(SIP_PYTUPLE types /TypeHintValue="()"/, const QString &name = QString(), Qt::FindChildOptions options = Qt::FindChildrenRecursively) const /TypeHint="List[QObject]"/;
+    SIP_PYLIST findChildren(SIP_PYTUPLE types /TypeHint="Tuple[Type[QObjectT], ...]", TypeHintValue="()"/, const QString &name = QString(), Qt::FindChildOptions options = Qt::FindChildrenRecursively) const /TypeHint="List[QObjectT]"/;
 %MethodCode
         sipRes = qtcore_FindChildren(sipCpp, qtcore_check_tuple_types(a0), *a1, *a2);
         
@@ -491,7 +491,7 @@ callable.
             sipIsErr = 1;
 %End
 
-    SIP_PYLIST findChildren(SIP_PYTYPE type, const QRegExp &regExp, Qt::FindChildOptions options = Qt::FindChildrenRecursively) const /TypeHint="List[QObject]"/;
+    SIP_PYLIST findChildren(SIP_PYTYPE type /TypeHint="Type[QObjectT]"/, const QRegExp &regExp, Qt::FindChildOptions options = Qt::FindChildrenRecursively) const /TypeHint="List[QObjectT]"/;
 %MethodCode
         sipRes = qtcore_FindChildren(sipCpp, qtcore_type_to_tuple(a0), *a1, *a2);
         
@@ -499,7 +499,7 @@ callable.
             sipIsErr = 1;
 %End
 
-    SIP_PYLIST findChildren(SIP_PYTUPLE types /TypeHintValue="()"/, const QRegExp &regExp, Qt::FindChildOptions options = Qt::FindChildrenRecursively) const /TypeHint="List[QObject]"/;
+    SIP_PYLIST findChildren(SIP_PYTUPLE types /TypeHint="Tuple[Type[QObjectT], ...]", TypeHintValue="()"/, const QRegExp &regExp, Qt::FindChildOptions options = Qt::FindChildrenRecursively) const /TypeHint="List[QObjectT]"/;
 %MethodCode
         sipRes = qtcore_FindChildren(sipCpp, qtcore_check_tuple_types(a0), *a1, *a2);
         
@@ -507,7 +507,7 @@ callable.
             sipIsErr = 1;
 %End
 
-    SIP_PYLIST findChildren(SIP_PYTYPE type, const QRegularExpression &re, Qt::FindChildOptions options = Qt::FindChildrenRecursively) const /TypeHint="List[QObject]"/;
+    SIP_PYLIST findChildren(SIP_PYTYPE type /TypeHint="Type[QObjectT]"/, const QRegularExpression &re, Qt::FindChildOptions options = Qt::FindChildrenRecursively) const /TypeHint="List[QObjectT]"/;
 %MethodCode
         sipRes = qtcore_FindChildren(sipCpp, qtcore_type_to_tuple(a0), *a1, *a2);
         
@@ -515,7 +515,7 @@ callable.
             sipIsErr = 1;
 %End
 
-    SIP_PYLIST findChildren(SIP_PYTUPLE types /TypeHintValue="()"/, const QRegularExpression &re, Qt::FindChildOptions options = Qt::FindChildrenRecursively) const /TypeHint="List[QObject]"/;
+    SIP_PYLIST findChildren(SIP_PYTUPLE types /TypeHint="Tuple[Type[QObjectT], ...]", TypeHintValue="()"/, const QRegularExpression &re, Qt::FindChildOptions options = Qt::FindChildrenRecursively) const /TypeHint="List[QObjectT]"/;
 %MethodCode
         sipRes = qtcore_FindChildren(sipCpp, qtcore_check_tuple_types(a0), *a1, *a2);
         
@@ -691,7 +691,7 @@ SIP_PYOBJECT QT_TRANSLATE_NOOP(SIP_PYOBJECT /TypeHint="str"/, SIP_PYOBJECT /Type
     sipRes = a1;
 %End
 
-SIP_PYOBJECT pyqtSlot(... types, const char *name = 0, const char *result = 0) /NoArgParser, TypeHint="Callable[..., Optional[str]]"/;
+SIP_PYOBJECT pyqtSlot(... types, const char *name = 0, const char *result = 0) /NoArgParser, NoTypeHint/;
 %Docstring
 @pyqtSlot(*types, name: Optional[str], result: Optional[str])
 
diff --git a/sip/QtCore/qstring.sip b/sip/QtCore/qstring.sip
index cffcada3..5edb8292 100644
--- a/sip/QtCore/qstring.sip
+++ b/sip/QtCore/qstring.sip
@@ -21,7 +21,7 @@
 
 
 // QString mapped type.
-%MappedType QString /AllowNone,TypeHint="str",TypeHintValue="''"/
+%MappedType QString /AllowNone, TypeHintIn="Optional[str]", TypeHintOut="str", TypeHintValue="''"/
 {
 %TypeHeaderCode
 #include <qstring.h>
diff --git a/sip/QtGui/qpainter.sip b/sip/QtGui/qpainter.sip
index 10416ba7..e084865b 100644
--- a/sip/QtGui/qpainter.sip
+++ b/sip/QtGui/qpainter.sip
@@ -192,7 +192,7 @@ public:
     void drawPoints(const QPolygonF &points);
     void drawPoints(const QPolygon &points);
     void drawPoints(const QPointF *points /Array/, int pointCount /ArraySize/);
-    void drawPoints(const QPointF *point, ...);
+    void drawPoints(const QPointF *point, ... /TypeHint="QPointF"/);
 %MethodCode
         QPointF *points = qtgui_inst_array<QPointF>(a0, a1, sipType_QPointF);
         
@@ -206,7 +206,7 @@ public:
 %End
 
     void drawPoints(const QPoint *points /Array/, int pointCount /ArraySize/);
-    void drawPoints(const QPoint *point, ...);
+    void drawPoints(const QPoint *point, ... /TypeHint="QPoint"/);
 %MethodCode
         QPoint *points = qtgui_inst_array<QPoint>(a0, a1, sipType_QPoint);
         
@@ -220,7 +220,7 @@ public:
 %End
 
     void drawLines(const QLineF *lines /Array/, int lineCount /ArraySize/);
-    void drawLines(const QLineF *line, ...);
+    void drawLines(const QLineF *line, ... /TypeHint="QLineF"/);
 %MethodCode
         QLineF *lines = qtgui_inst_array<QLineF>(a0, a1, sipType_QLineF);
         
@@ -238,7 +238,7 @@ public:
         sipCpp->drawLines(a0, a1 / 2);
 %End
 
-    void drawLines(const QPointF *pointPair, ...);
+    void drawLines(const QPointF *pointPair, ... /TypeHint="QPointF"/);
 %MethodCode
         QPointF *pairs = qtgui_inst_array<QPointF>(a0, a1, sipType_QPointF);
         
@@ -252,7 +252,7 @@ public:
 %End
 
     void drawLines(const QLine *lines /Array/, int lineCount /ArraySize/);
-    void drawLines(const QLine *line, ...);
+    void drawLines(const QLine *line, ... /TypeHint="QLine"/);
 %MethodCode
         QLine *lines = qtgui_inst_array<QLine>(a0, a1, sipType_QLine);
         
@@ -270,7 +270,7 @@ public:
         sipCpp->drawLines(a0, a1 / 2);
 %End
 
-    void drawLines(const QPoint *pointPair, ...);
+    void drawLines(const QPoint *pointPair, ... /TypeHint="QPoint"/);
 %MethodCode
         QPoint *pairs = qtgui_inst_array<QPoint>(a0, a1, sipType_QPoint);
         
@@ -284,7 +284,7 @@ public:
 %End
 
     void drawRects(const QRectF *rects /Array/, int rectCount /ArraySize/);
-    void drawRects(const QRectF *rect, ...);
+    void drawRects(const QRectF *rect, ... /TypeHint="QRectF"/);
 %MethodCode
         QRectF *rects = qtgui_inst_array<QRectF>(a0, a1, sipType_QRectF);
         
@@ -298,7 +298,7 @@ public:
 %End
 
     void drawRects(const QRect *rects /Array/, int rectCount /ArraySize/);
-    void drawRects(const QRect *rect, ...);
+    void drawRects(const QRect *rect, ... /TypeHint="QRect"/);
 %MethodCode
         QRect *rects = qtgui_inst_array<QRect>(a0, a1, sipType_QRect);
         
@@ -316,7 +316,7 @@ public:
     void drawPolyline(const QPolygonF &polyline);
     void drawPolyline(const QPolygon &polyline);
     void drawPolyline(const QPointF *points /Array/, int pointCount /ArraySize/);
-    void drawPolyline(const QPointF *point, ...);
+    void drawPolyline(const QPointF *point, ... /TypeHint="QPointF"/);
 %MethodCode
         QPointF *points = qtgui_inst_array<QPointF>(a0, a1, sipType_QPointF);
         
@@ -330,7 +330,7 @@ public:
 %End
 
     void drawPolyline(const QPoint *points /Array/, int pointCount /ArraySize/);
-    void drawPolyline(const QPoint *point, ...);
+    void drawPolyline(const QPoint *point, ... /TypeHint="QPoint"/);
 %MethodCode
         QPoint *points = qtgui_inst_array<QPoint>(a0, a1, sipType_QPoint);
         
@@ -346,7 +346,7 @@ public:
     void drawPolygon(const QPolygonF &points, Qt::FillRule fillRule = Qt::OddEvenFill);
     void drawPolygon(const QPolygon &points, Qt::FillRule fillRule = Qt::OddEvenFill);
     void drawPolygon(const QPointF *points /Array/, int pointCount /ArraySize/, Qt::FillRule fillRule = Qt::OddEvenFill);
-    void drawPolygon(const QPointF *point, ...);
+    void drawPolygon(const QPointF *point, ... /TypeHint="QPointF"/);
 %MethodCode
         QPointF *points = qtgui_inst_array<QPointF>(a0, a1, sipType_QPointF);
         
@@ -360,7 +360,7 @@ public:
 %End
 
     void drawPolygon(const QPoint *points /Array/, int pointCount /ArraySize/, Qt::FillRule fillRule = Qt::OddEvenFill);
-    void drawPolygon(const QPoint *point, ...);
+    void drawPolygon(const QPoint *point, ... /TypeHint="QPoint"/);
 %MethodCode
         QPoint *points = qtgui_inst_array<QPoint>(a0, a1, sipType_QPoint);
         
@@ -376,7 +376,7 @@ public:
     void drawConvexPolygon(const QPolygonF &poly);
     void drawConvexPolygon(const QPolygon &poly);
     void drawConvexPolygon(const QPointF *points /Array/, int pointCount /ArraySize/);
-    void drawConvexPolygon(const QPointF *point, ...);
+    void drawConvexPolygon(const QPointF *point, ... /TypeHint="QPointF"/);
 %MethodCode
         QPointF *points = qtgui_inst_array<QPointF>(a0, a1, sipType_QPointF);
         
@@ -390,7 +390,7 @@ public:
 %End
 
     void drawConvexPolygon(const QPoint *points /Array/, int pointCount /ArraySize/);
-    void drawConvexPolygon(const QPoint *point, ...);
+    void drawConvexPolygon(const QPoint *point, ... /TypeHint="QPoint"/);
 %MethodCode
         QPoint *points = qtgui_inst_array<QPoint>(a0, a1, sipType_QPoint);
         
diff --git a/sip/QtGui/qpolygon.sip b/sip/QtGui/qpolygon.sip
index 9e18300b..f92c51ee 100644
--- a/sip/QtGui/qpolygon.sip
+++ b/sip/QtGui/qpolygon.sip
@@ -116,7 +116,7 @@ public:
         }
 %End
 
-    void setPoints(int firstx, int firsty, ...);
+    void setPoints(int firstx, int firsty, ... /TypeHint="int"/);
 %MethodCode
         // Accept at least one pair of integer coordinates.
         int nPoints = 1 + ((PyTuple_Size(a2) + 1) >> 1);
@@ -134,7 +134,7 @@ public:
         delete[] points;
 %End
 
-    void putPoints(int index, int firstx, int firsty, ...);
+    void putPoints(int index, int firstx, int firsty, ... /TypeHint="int"/);
 %MethodCode
         // Accept at least one pair of integer coordinates.
         int nPoints = 1 + ((PyTuple_Size(a3) + 1) >> 1);



More information about the Neon-commits mailing list