diff options
Diffstat (limited to 'sources/pyside6')
7 files changed, 45 insertions, 55 deletions
diff --git a/sources/pyside6/libpyside/pysideclassdecorator.cpp b/sources/pyside6/libpyside/pysideclassdecorator.cpp index 39b35025b..ec69c5fe7 100644 --- a/sources/pyside6/libpyside/pysideclassdecorator.cpp +++ b/sources/pyside6/libpyside/pysideclassdecorator.cpp @@ -7,7 +7,7 @@ #include "pysideqobject.h" #include <basewrapper.h> -#include <sbkcppstring.h> +#include <sbkstring.h> namespace PySide::ClassDecorator { @@ -63,7 +63,7 @@ int StringDecoratorPrivate::convertToString(PyObject *self, PyObject *args) if (PyUnicode_Check(arg)) { auto *pData = DecoratorPrivate::get<StringDecoratorPrivate>(self); result = 0; - Shiboken::String::toCppString(arg, &(pData->m_string)); + pData->m_string.assign(Shiboken::String::toCString(arg)); } } return result; diff --git a/sources/pyside6/libpyside/pysideclassdecorator_p.h b/sources/pyside6/libpyside/pysideclassdecorator_p.h index 3e4ad7515..d4e21a5b4 100644 --- a/sources/pyside6/libpyside/pysideclassdecorator_p.h +++ b/sources/pyside6/libpyside/pysideclassdecorator_p.h @@ -8,7 +8,7 @@ #include <sbkpython.h> -#include <QtCore/qtclasshelpermacros.h> +#include <QtCore/QByteArray> #include <array> #include <string> @@ -64,7 +64,7 @@ public: /// Init function that retrieves the string parameter using convertToString() int tp_init(PyObject *self, PyObject *args, PyObject *kwds) override; - const std::string &string() const { return m_string; } + QByteArray string() const { return m_string; } protected: /// Helper function that retrieves the string parameter @@ -74,7 +74,7 @@ protected: int convertToString(PyObject *self, PyObject *args); private: - std::string m_string; + QByteArray m_string; }; /// Base class for private objects of class decorator with a type parameter diff --git a/sources/pyside6/libpysideqml/pysideqmlnamedelement.cpp b/sources/pyside6/libpysideqml/pysideqmlnamedelement.cpp index f29638017..8d2c558cf 100644 --- a/sources/pyside6/libpysideqml/pysideqmlnamedelement.cpp +++ b/sources/pyside6/libpysideqml/pysideqmlnamedelement.cpp @@ -31,7 +31,7 @@ PyObject *PySideQmlNamedElementPrivate::tp_call(PyObject *self, PyObject *args, return nullptr; auto *data = DecoratorPrivate::get<PySideQmlNamedElementPrivate>(self); - auto *result = PySide::Qml::qmlNamedElementMacro(klass, data->string().c_str()); + auto *result = PySide::Qml::qmlNamedElementMacro(klass, data->string()); Py_XINCREF(result); return result; } diff --git a/sources/pyside6/libpysideqml/pysideqmlregistertype.cpp b/sources/pyside6/libpysideqml/pysideqmlregistertype.cpp index 1208220ca..cf3b4dc52 100644 --- a/sources/pyside6/libpysideqml/pysideqmlregistertype.cpp +++ b/sources/pyside6/libpysideqml/pysideqmlregistertype.cpp @@ -85,6 +85,32 @@ static inline bool isQmlParserStatus(const QMetaObject *o) return inheritsFrom(o, "QPyQmlParserStatus"); } +static QByteArray getGlobalString(const char *name) +{ + PyObject *globalVar = PyDict_GetItemString(PyEval_GetGlobals(), name); + + if (globalVar == nullptr || PyUnicode_Check(globalVar) == 0) + return {}; + + const char *stringValue = _PepUnicode_AsString(globalVar); + return stringValue != nullptr ? QByteArray(stringValue) : QByteArray{}; +} + +static int getGlobalInt(const char *name) +{ + PyObject *globalVar = PyDict_GetItemString(PyEval_GetGlobals(), name); + + if (globalVar == nullptr || PyLong_Check(globalVar) == 0) + return -1; + + long value = PyLong_AsLong(globalVar); + + if (value > std::numeric_limits<int>::max() || value < std::numeric_limits<int>::min()) + return -1; + + return value; +} + namespace PySide::Qml { int qmlRegisterType(PyObject *pyObj, const char *uri, int versionMajor, @@ -334,44 +360,6 @@ int qmlRegisterSingletonInstance(PyObject *pyObj, const char *uri, int versionMa } // namespace PySide::Qml -static std::string getGlobalString(const char *name) -{ - using Shiboken::AutoDecRef; - - PyObject *globals = PyEval_GetGlobals(); - - AutoDecRef pyName(Py_BuildValue("s", name)); - - PyObject *globalVar = PyDict_GetItem(globals, pyName); - - if (globalVar == nullptr || !PyUnicode_Check(globalVar)) - return ""; - - const char *stringValue = _PepUnicode_AsString(globalVar); - return stringValue != nullptr ? stringValue : ""; -} - -static int getGlobalInt(const char *name) -{ - using Shiboken::AutoDecRef; - - PyObject *globals = PyEval_GetGlobals(); - - AutoDecRef pyName(Py_BuildValue("s", name)); - - PyObject *globalVar = PyDict_GetItem(globals, pyName); - - if (globalVar == nullptr || !PyLong_Check(globalVar)) - return -1; - - long value = PyLong_AsLong(globalVar); - - if (value > std::numeric_limits<int>::max() || value < std::numeric_limits<int>::min()) - return -1; - - return value; -} - enum class RegisterMode { Normal, Anonymous, @@ -399,11 +387,11 @@ static PyObject *qmlElementMacroHelper(PyObject *pyObj, return nullptr; } - std::string importName = getGlobalString("QML_IMPORT_NAME"); + const auto importName = getGlobalString("QML_IMPORT_NAME"); int majorVersion = getGlobalInt("QML_IMPORT_MAJOR_VERSION"); int minorVersion = getGlobalInt("QML_IMPORT_MINOR_VERSION"); - if (importName.empty()) { + if (importName.isEmpty()) { PyErr_Format(PyExc_TypeError, "You need specify QML_IMPORT_NAME in order to use %s.", decoratorName); return nullptr; @@ -419,7 +407,7 @@ static PyObject *qmlElementMacroHelper(PyObject *pyObj, if (minorVersion == -1) minorVersion = 0; - const char *uri = importName.c_str(); + const char *uri = importName.constData(); const int result = mode == RegisterMode::Singleton ? PySide::Qml::qmlRegisterSingletonType(pyObj, uri, majorVersion, minorVersion, typeName, nullptr, @@ -452,7 +440,7 @@ PyObject *qmlElementMacro(PyObject *pyObj, const char *decoratorName, mode = RegisterMode::Singleton; else if (info->flags.testFlag(PySide::Qml::QmlTypeFlag::Uncreatable)) mode = RegisterMode::Uncreatable; - noCreationReason = info->noCreationReason.c_str(); + noCreationReason = info->noCreationReason.constData(); if (info->foreignType) registerObject = reinterpret_cast<PyObject *>(info->foreignType); } @@ -466,9 +454,9 @@ PyObject *qmlElementMacro(PyObject *pyObj) return qmlElementMacro(pyObj, "QmlElement"); } -PyObject *qmlNamedElementMacro(PyObject *pyObj, const char *typeName) +PyObject *qmlNamedElementMacro(PyObject *pyObj, const QByteArray &typeName) { - return qmlElementMacro(pyObj, "QmlNamedElement", qstrdup(typeName)); + return qmlElementMacro(pyObj, "QmlNamedElement", qstrdup(typeName.constData())); } PyObject *qmlAnonymousMacro(PyObject *pyObj) diff --git a/sources/pyside6/libpysideqml/pysideqmlregistertype_p.h b/sources/pyside6/libpysideqml/pysideqmlregistertype_p.h index 3f077ee2a..f11f92241 100644 --- a/sources/pyside6/libpysideqml/pysideqmlregistertype_p.h +++ b/sources/pyside6/libpysideqml/pysideqmlregistertype_p.h @@ -6,12 +6,14 @@ #include <sbkpython.h> +#include <QtCore/QByteArray> + PyTypeObject *qObjectType(); namespace PySide::Qml { -PyObject *qmlNamedElementMacro(PyObject *pyObj, const char *typeName); +PyObject *qmlNamedElementMacro(PyObject *pyObj, const QByteArray &typeName); } diff --git a/sources/pyside6/libpysideqml/pysideqmltypeinfo.cpp b/sources/pyside6/libpysideqml/pysideqmltypeinfo.cpp index 0304d33e3..0dc5d64c8 100644 --- a/sources/pyside6/libpysideqml/pysideqmltypeinfo.cpp +++ b/sources/pyside6/libpysideqml/pysideqmltypeinfo.cpp @@ -42,8 +42,8 @@ QDebug operator<<(QDebug d, const QmlTypeInfo &i) d.noquote(); d.nospace(); d << "QmlTypeInfo(" << i.flags; - if (!i.noCreationReason.empty()) - d << ", noCreationReason=\"" << i.noCreationReason.c_str() << '"'; + if (!i.noCreationReason.isEmpty()) + d << ", noCreationReason=\"" << i.noCreationReason << '"'; if (i.foreignType) d << ", foreignType=" << i.foreignType->tp_name; if (i.attachedType) diff --git a/sources/pyside6/libpysideqml/pysideqmltypeinfo_p.h b/sources/pyside6/libpysideqml/pysideqmltypeinfo_p.h index e10a2b38c..cf06bb304 100644 --- a/sources/pyside6/libpysideqml/pysideqmltypeinfo_p.h +++ b/sources/pyside6/libpysideqml/pysideqmltypeinfo_p.h @@ -6,10 +6,10 @@ #include <sbkpython.h> +#include <QtCore/QByteArray> #include <QtCore/QFlags> #include <memory> -#include <string> QT_FORWARD_DECLARE_CLASS(QDebug) QT_FORWARD_DECLARE_CLASS(QObject) @@ -30,7 +30,7 @@ Q_DECLARE_OPERATORS_FOR_FLAGS(QmlTypeFlags) struct QmlTypeInfo { QmlTypeFlags flags; - std::string noCreationReason; + QByteArray noCreationReason; PyTypeObject *foreignType = nullptr; PyTypeObject *attachedType = nullptr; PyTypeObject *extensionType = nullptr; |
