diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2024-02-01 13:40:29 +0100 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2024-02-01 21:54:47 +0100 |
commit | f77f2f36dc1017e88d3776c0564c4760c338c389 (patch) | |
tree | f69a4444910850e02ca97fec4700350c83090527 | |
parent | df372c292524a8d0813ac917bc8ce77c0a0803de (diff) |
PySide6: Fix callable invocations
- Always make sure to decref the result by using AutoDecref.
- Check whether the callback passed to
QAbstractOAuth::setModifyParametersFunction() really returns a dict.
- Fix bool return of the callback passed to
QWebEngineCookieStore::setCookieFilter().
- Some code cosmetics
Amends f56329c995d4a708d4169ef52f819b38de1810b0,
535a781d534f4c9d102342a9813528e48c576ffd,
96715550f3d980dc5554c67a3660e94b6a9a3e76,
cd394249fc77063a2bd6ba7a7633fdbc10621475,
5fac301e8e5a8d15eaff91d78b5deeeb2204c7b4,
Task-number: PYSIDE-1612
Task-number: PYSIDE-1815
Task-number: PYSIDE-1912
Task-number: PYSIDE-2234
Pick-to: 6.5
Change-Id: I180ed4dfa63fe8ac06a898492244a85ed926c2d6
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
(cherry picked from commit f6538d29fbd7d216ce00cdc2870c3a1055a24d26)
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Adrian Herrmann <adrian.herrmann@qt.io>
-rw-r--r-- | sources/pyside6/PySide6/glue/qtcore.cpp | 6 | ||||
-rw-r--r-- | sources/pyside6/PySide6/glue/qtnetworkauth.cpp | 16 | ||||
-rw-r--r-- | sources/pyside6/PySide6/glue/qtwebenginecore.cpp | 14 | ||||
-rw-r--r-- | sources/pyside6/PySide6/glue/qtwebenginewidgets.cpp | 6 |
4 files changed, 22 insertions, 20 deletions
diff --git a/sources/pyside6/PySide6/glue/qtcore.cpp b/sources/pyside6/PySide6/glue/qtcore.cpp index 6d51f337f..a687d8447 100644 --- a/sources/pyside6/PySide6/glue/qtcore.cpp +++ b/sources/pyside6/PySide6/glue/qtcore.cpp @@ -1920,7 +1920,7 @@ auto callback = [callable]() -> void return; } Shiboken::GilState state; - PyObject_CallObject(callable, nullptr); + Shiboken::AutoDecRef ret(PyObject_CallObject(callable, nullptr)); Py_DECREF(callable); }; Py_INCREF(callable); @@ -2007,9 +2007,9 @@ auto callback = [callable, count, arg_qpermission](const QPermission &permission if (arg_qpermission) { Shiboken::AutoDecRef arglist(PyTuple_New(1)); PyTuple_SET_ITEM(arglist.object(), 0, %CONVERTTOPYTHON[QPermission](permission)); - PyObject_CallObject(callable, arglist); + Shiboken::AutoDecRef ret(PyObject_CallObject(callable, arglist)); } else { - PyObject_CallObject(callable, nullptr); + Shiboken::AutoDecRef ret(PyObject_CallObject(callable, nullptr)); } Py_DECREF(callable); }; diff --git a/sources/pyside6/PySide6/glue/qtnetworkauth.cpp b/sources/pyside6/PySide6/glue/qtnetworkauth.cpp index e22569e2e..f390605d2 100644 --- a/sources/pyside6/PySide6/glue/qtnetworkauth.cpp +++ b/sources/pyside6/PySide6/glue/qtnetworkauth.cpp @@ -16,13 +16,15 @@ auto callback = [callable](QAbstractOAuth::Stage stage, QMultiMap<QString, QVari PyTuple_SET_ITEM(arglist, 1, %CONVERTTOPYTHON[QMultiMap<QString, QVariant>](dict)); Shiboken::AutoDecRef ret(PyObject_CallObject(callable, arglist)); - PyObject *key; - PyObject *value; - Py_ssize_t pos = 0; - while (PyDict_Next(ret, &pos, &key, &value)) { - QString cppKey = %CONVERTTOCPP[QString](key); - QVariant cppValue = %CONVERTTOCPP[QVariant](value); - dictPointer->replace(cppKey, cppValue); + if (!ret.isNull() && PyDict_Check(ret.object()) != 0) { + PyObject *key{}; + PyObject *value{}; + Py_ssize_t pos = 0; + while (PyDict_Next(ret.object(), &pos, &key, &value)) { + QString cppKey = %CONVERTTOCPP[QString](key); + QVariant cppValue = %CONVERTTOCPP[QVariant](value); + dictPointer->replace(cppKey, cppValue); + } } Py_DECREF(callable); diff --git a/sources/pyside6/PySide6/glue/qtwebenginecore.cpp b/sources/pyside6/PySide6/glue/qtwebenginecore.cpp index a569e6c11..0a0a00ec8 100644 --- a/sources/pyside6/PySide6/glue/qtwebenginecore.cpp +++ b/sources/pyside6/PySide6/glue/qtwebenginecore.cpp @@ -10,11 +10,11 @@ auto callback = [callable](const QWebEngineCookieStore::FilterRequest& filterReq PyTuple_SET_ITEM(arglist, 0, %CONVERTTOPYTHON[QWebEngineCookieStore::FilterRequest](filterRequest)); Py_INCREF(callable); - PyObject* ret = PyObject_CallObject(callable, arglist); + Shiboken::AutoDecRef ret(PyObject_CallObject(callable, arglist)); Py_DECREF(callable); - return ret; - + return ret.object() == Py_True; }; + %CPPSELF.%FUNCTION_NAME(callback); // @snippet qwebenginecookiestore-setcookiefilter @@ -24,13 +24,13 @@ auto callback = [callable](std::unique_ptr<QWebEngineNotification> webEngineNoti { Shiboken::GilState state; Shiboken::AutoDecRef arglist(PyTuple_New(1)); + auto *notification = webEngineNotification.release(); PyTuple_SET_ITEM(arglist.object(), 0, - Shiboken::Conversions::pointerToPython( - SbkPySide6_QtWebEngineCoreTypes[SBK_QWEBENGINENOTIFICATION_IDX], - webEngineNotification.release())); + %CONVERTTOPYTHON[QWebEngineNotification*](notification)); Py_INCREF(callable); - PyObject_CallObject(callable, arglist); + Shiboken::AutoDecRef ret(PyObject_CallObject(callable, arglist)); Py_DECREF(callable); }; + %CPPSELF.%FUNCTION_NAME(callback); // @snippet qwebengineprofile-setnotificationpresenter diff --git a/sources/pyside6/PySide6/glue/qtwebenginewidgets.cpp b/sources/pyside6/PySide6/glue/qtwebenginewidgets.cpp index 8fdd6b693..af15130a4 100644 --- a/sources/pyside6/PySide6/glue/qtwebenginewidgets.cpp +++ b/sources/pyside6/PySide6/glue/qtwebenginewidgets.cpp @@ -55,8 +55,8 @@ auto callback = [callable](const QString &text) PyTuple_SET_ITEM(arglist, 0, %CONVERTTOPYTHON[QString](text)); Shiboken::AutoDecRef ret(PyObject_CallObject(callable, arglist)); Py_DECREF(callable); - }; + Py_INCREF(callable); %CPPSELF.%FUNCTION_NAME(callback); // @snippet qwebenginepage-convertto @@ -95,8 +95,8 @@ auto callback = [callable](const QVariant &result) // PyTuple_SET_ITEM(arglist, 0, %CONVERTTOPYTHON[bool](found)); Shiboken::AutoDecRef ret(PyObject_CallObject(callable, arglist)); Py_DECREF(callable); - }; + Py_INCREF(callable); %CPPSELF.%FUNCTION_NAME(%1, %2, callback); // @snippet qwebenginepage-runjavascript @@ -114,8 +114,8 @@ auto callback = [callable](const QByteArray &pdf) PyTuple_SET_ITEM(arglist, 0, %CONVERTTOPYTHON[QByteArray](pdf)); Shiboken::AutoDecRef ret(PyObject_CallObject(callable, arglist)); Py_DECREF(callable); - }; + Py_INCREF(callable); %CPPSELF.%FUNCTION_NAME(callback, %2); // @snippet qwebenginepage-printtopdf |