Skip to content

Commit 0420f72

Browse files
3x380Vwwmayer
authored andcommitted
Gui: PythonWrapper: Consolidate typeName handling
Use typeName consistently for both PySide and Python interface code paths.
1 parent 866909e commit 0420f72

File tree

1 file changed

+23
-37
lines changed

1 file changed

+23
-37
lines changed

src/Gui/PythonWrapper.cpp

+23-37
Original file line numberDiff line numberDiff line change
@@ -612,9 +612,9 @@ QImage *PythonWrapper::toQImage(PyObject *pyobj)
612612
Py::Object PythonWrapper::fromQIcon(const QIcon* icon)
613613
{
614614
#if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE)
615-
const char* typeName = typeid(*const_cast<QIcon*>(icon)).name();
616615
auto type = getPyTypeObjectForTypeName<QIcon>();
617616
if (type) {
617+
const char* typeName = typeid(*const_cast<QIcon*>(icon)).name();
618618
PyObject* pyobj = Shiboken::Object::newObject(type, const_cast<QIcon*>(icon), true, false, typeName);
619619
return Py::asObject(pyobj);
620620
}
@@ -636,14 +636,18 @@ QIcon *PythonWrapper::toQIcon(PyObject *pyobj)
636636
Py::Object PythonWrapper::fromQDir(const QDir& dir)
637637
{
638638
#if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE)
639-
const char* typeName = typeid(dir).name();
640639
auto type = getPyTypeObjectForTypeName<QDir>();
641640
if (type) {
641+
const char* typeName = typeid(dir).name();
642642
PyObject* pyobj = Shiboken::Object::newObject(type, const_cast<QDir*>(&dir), false, false, typeName);
643643
return Py::asObject(pyobj);
644644
}
645645
#else
646-
Q_UNUSED(dir)
646+
// Access shiboken/PySide via Python
647+
Py::Object obj = qt_wrapInstance<const QDir*>(&dir, "QDir", "QtGui");
648+
if (!obj.isNull()) {
649+
return obj;
650+
}
647651
#endif
648652
throw Py::RuntimeError("Failed to wrap directory");
649653
}
@@ -713,32 +717,23 @@ Py::Object PythonWrapper::fromQObject(QObject* object, const char* className)
713717
if (!object) {
714718
return Py::None();
715719
}
720+
const char* typeName;
721+
if (className) {
722+
typeName = className;
723+
}
724+
else {
725+
typeName = object->metaObject()->className();
726+
}
716727
#if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE)
717728
// Access shiboken/PySide via C++
718729
auto type = getPyTypeObjectForTypeName<QObject>();
719730
if (type) {
720-
std::string typeName;
721-
if (className) {
722-
typeName = className;
723-
}
724-
else {
725-
typeName = object->metaObject()->className();
726-
}
727-
728-
PyObject* pyobj = Shiboken::Object::newObject(type, object, false, false, typeName.c_str());
731+
PyObject* pyobj = Shiboken::Object::newObject(type, object, false, false, typeName);
729732
WrapperManager::instance().addQObject(object, pyobj);
730733
return Py::asObject(pyobj);
731734
}
732735
#else
733736
// Access shiboken/PySide via Python
734-
std::string typeName;
735-
if (className) {
736-
typeName = className;
737-
}
738-
else {
739-
typeName = object->metaObject()->className();
740-
}
741-
742737
Py::Object obj = qt_wrapInstance<QObject*>(object, typeName, "QtCore");
743738
if (!obj.isNull()) {
744739
return obj;
@@ -749,32 +744,23 @@ Py::Object PythonWrapper::fromQObject(QObject* object, const char* className)
749744

750745
Py::Object PythonWrapper::fromQWidget(QWidget* widget, const char* className)
751746
{
747+
const char* typeName;
748+
if (className) {
749+
typeName = className;
750+
}
751+
else {
752+
typeName = widget->metaObject()->className();
753+
}
752754
#if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE)
753755
// Access shiboken/PySide via C++
754756
auto type = getPyTypeObjectForTypeName<QWidget>();
755757
if (type) {
756-
std::string typeName;
757-
if (className) {
758-
typeName = className;
759-
}
760-
else {
761-
typeName = widget->metaObject()->className();
762-
}
763-
764-
PyObject* pyobj = Shiboken::Object::newObject(type, widget, false, false, typeName.c_str());
758+
PyObject* pyobj = Shiboken::Object::newObject(type, widget, false, false, typeName);
765759
WrapperManager::instance().addQObject(widget, pyobj);
766760
return Py::asObject(pyobj);
767761
}
768762
#else
769763
// Access shiboken/PySide via Python
770-
std::string typeName;
771-
if (className) {
772-
typeName = className;
773-
}
774-
else {
775-
typeName = widget->metaObject()->className();
776-
}
777-
778764
Py::Object obj = qt_wrapInstance<QWidget*>(widget, typeName, "QtWidgets");
779765
if (!obj.isNull()) {
780766
return obj;

0 commit comments

Comments
 (0)