Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2024-07-08 14:31:21 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2024-07-29 08:45:29 +0200
commit51df6eb4c0a1b02cc476d1fe5a7f9f30cb60e600 (patch)
treeb0b03348da6a84463b05773cc9a99fc0649e6fc1 /sources/pyside6/libpyside
parent843909f0215fa0ef0a6b41db380d3aae09b25b7f (diff)
libpyside: Use the new DynamicSlot in PySideQSlotObject
Task-number: PYSIDE-2810 Change-Id: I51bd24520cc9fd420ee8256f1278bb17cd406235 Reviewed-by: Christian Tismer <tismer@stackless.com>
Diffstat (limited to 'sources/pyside6/libpyside')
-rw-r--r--sources/pyside6/libpyside/pysideqslotobject_p.cpp14
-rw-r--r--sources/pyside6/libpyside/pysideqslotobject_p.h7
2 files changed, 11 insertions, 10 deletions
diff --git a/sources/pyside6/libpyside/pysideqslotobject_p.cpp b/sources/pyside6/libpyside/pysideqslotobject_p.cpp
index 40b011fcf..279a3d4e0 100644
--- a/sources/pyside6/libpyside/pysideqslotobject_p.cpp
+++ b/sources/pyside6/libpyside/pysideqslotobject_p.cpp
@@ -2,7 +2,7 @@
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include "pysideqslotobject_p.h"
-#include "signalmanager.h"
+#include "dynamicslot_p.h"
#include <gilstate.h>
@@ -13,23 +13,19 @@ PySideQSlotObject::PySideQSlotObject(PyObject *callable,
const QByteArrayList &parameterTypes,
const char *returnType) :
QtPrivate::QSlotObjectBase(&impl),
- m_callable(callable),
+ m_dynamicSlot(DynamicSlot::create(callable)),
m_parameterTypes(parameterTypes),
m_returnType(returnType)
{
- Py_INCREF(callable);
}
-PySideQSlotObject::~PySideQSlotObject()
+void PySideQSlotObject::call(void **args)
{
Shiboken::GilState state;
- Py_DECREF(m_callable);
+ m_dynamicSlot->call(m_parameterTypes, m_returnType, args);
}
-void PySideQSlotObject::call(void **args)
-{
- SignalManager::callPythonMetaMethod(m_parameterTypes, m_returnType, args, m_callable);
-}
+PySideQSlotObject::~PySideQSlotObject() = default;
void PySideQSlotObject::impl(int which, QSlotObjectBase *this_, QObject *receiver,
void **args, bool *ret)
diff --git a/sources/pyside6/libpyside/pysideqslotobject_p.h b/sources/pyside6/libpyside/pysideqslotobject_p.h
index 827f0193c..875369c27 100644
--- a/sources/pyside6/libpyside/pysideqslotobject_p.h
+++ b/sources/pyside6/libpyside/pysideqslotobject_p.h
@@ -10,11 +10,16 @@
#include <QtCore/QObject>
#include <QtCore/qobjectdefs.h>
+#include <memory>
+
namespace PySide
{
+class DynamicSlot;
+
class PySideQSlotObject : public QtPrivate::QSlotObjectBase
{
+ Q_DISABLE_COPY_MOVE(PySideQSlotObject)
public:
explicit PySideQSlotObject(PyObject *callable, const QByteArrayList &parameterTypes,
const char *returnType = nullptr);
@@ -24,7 +29,7 @@ private:
static void impl(int which, QSlotObjectBase *this_, QObject *receiver, void **args, bool *ret);
void call(void **args);
- PyObject *m_callable;
+ std::unique_ptr<DynamicSlot> m_dynamicSlot;
const QByteArrayList m_parameterTypes;
const char *m_returnType;
};