diff --git a/src/Gui/Navigation/NavigationStyle.cpp b/src/Gui/Navigation/NavigationStyle.cpp index 38f170877c..ca3d7c3887 100644 --- a/src/Gui/Navigation/NavigationStyle.cpp +++ b/src/Gui/Navigation/NavigationStyle.cpp @@ -319,10 +319,10 @@ NavigationStyle::~NavigationStyle() finalize(); delete this->animator; - if (pythonObject) { + if (!pythonObject.is(nullptr)) { Base::PyGILStateLocker lock; - Py_DECREF(pythonObject); - pythonObject = nullptr; + Base::PyObjectBase* obj = static_cast(pythonObject.ptr()); + obj->setInvalid(); } } @@ -1914,11 +1914,11 @@ void NavigationStyle::openPopupMenu(const SbVec2s& position) PyObject* NavigationStyle::getPyObject() { - if (!pythonObject) - pythonObject = new NavigationStylePy(this); - - Py_INCREF(pythonObject); - return pythonObject; + if (pythonObject.is(nullptr)) { + // ref counter is set to 1 + pythonObject = Py::asObject(new NavigationStylePy(this)); + } + return Py::new_reference_to(pythonObject); } // ---------------------------------------------------------------------------------- diff --git a/src/Gui/Navigation/NavigationStyle.h b/src/Gui/Navigation/NavigationStyle.h index b3000728ab..be54296471 100644 --- a/src/Gui/Navigation/NavigationStyle.h +++ b/src/Gui/Navigation/NavigationStyle.h @@ -37,6 +37,7 @@ #include #include +#include #include #include #include @@ -283,7 +284,7 @@ protected: SbSphereSheetProjector * spinprojector; //@} - PyObject* pythonObject; + Py::SmartPtr pythonObject; private: friend class NavigationAnimator;