aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <[email protected]>2025-05-13 10:14:40 +0200
committerFriedemann Kleint <[email protected]>2025-05-13 22:30:29 +0200
commitaecf087dead4855c09c3fe5aedcabc9678fdd2e6 (patch)
tree8a2c4c4629cf4bd748793512b07a34568ed12dc5
parent0acf51e178db93a235be6cfb0f08c1c3138e924d (diff)
libpyside: Make PyObjectWrapper movable
This is required by today's QVariant conversion code. Task-number: PYSIDE-2193 Pick-to: 6.9 Change-Id: I66efcfb797653fe1d617f1f0027fd60ec95e8a79 Reviewed-by: Shyamnath Premnadh <[email protected]>
-rw-r--r--sources/pyside6/libpyside/signalmanager.cpp12
-rw-r--r--sources/pyside6/libpyside/signalmanager.h4
2 files changed, 14 insertions, 2 deletions
diff --git a/sources/pyside6/libpyside/signalmanager.cpp b/sources/pyside6/libpyside/signalmanager.cpp
index 933edd318..e5f069c86 100644
--- a/sources/pyside6/libpyside/signalmanager.cpp
+++ b/sources/pyside6/libpyside/signalmanager.cpp
@@ -27,6 +27,7 @@
#include <QtCore/qscopedpointer.h>
#include <memory>
+#include <utility>
using namespace Qt::StringLiterals;
@@ -125,6 +126,17 @@ PyObjectWrapper::PyObjectWrapper(const PyObjectWrapper &other)
Py_XINCREF(m_me);
}
+PyObjectWrapper::PyObjectWrapper(PyObjectWrapper &&other) noexcept
+ : m_me{std::exchange(other.m_me, nullptr)}
+{
+}
+
+PyObjectWrapper &PyObjectWrapper::operator=(PyObjectWrapper &&other) noexcept
+{
+ m_me = std::exchange(other.m_me, nullptr);
+ return *this;
+}
+
PyObjectWrapper::~PyObjectWrapper()
{
// Check that Python is still initialized as sometimes this is called by a static destructor
diff --git a/sources/pyside6/libpyside/signalmanager.h b/sources/pyside6/libpyside/signalmanager.h
index d5c007dbe..52bb5f1d1 100644
--- a/sources/pyside6/libpyside/signalmanager.h
+++ b/sources/pyside6/libpyside/signalmanager.h
@@ -22,13 +22,13 @@ namespace PySide
class PYSIDE_API PyObjectWrapper
{
public:
- PyObjectWrapper(PyObjectWrapper&&) = delete;
- PyObjectWrapper& operator=(PyObjectWrapper &&) = delete;
PyObjectWrapper();
explicit PyObjectWrapper(PyObject* me);
PyObjectWrapper(const PyObjectWrapper &other);
PyObjectWrapper& operator=(const PyObjectWrapper &other);
+ PyObjectWrapper(PyObjectWrapper&&) noexcept;
+ PyObjectWrapper &operator=(PyObjectWrapper &&) noexcept;
void reset(PyObject *o);