diff --git a/src/App/Extension.cpp b/src/App/Extension.cpp
index 962ef781c1..94aff5ce46 100644
--- a/src/App/Extension.cpp
+++ b/src/App/Extension.cpp
@@ -33,6 +33,7 @@
#include "Base/Exception.h"
#include
#include
+#include
/* We do not use a standard property macro for type initiation. The reason is that we have the first
* PropertyData in the extension chain, there is no parent property data.
@@ -96,7 +97,12 @@ void Extension::initExtension(ExtensionContainer* obj) {
PyObject* Extension::getExtensionPyObject(void) {
- return nullptr;
+ if (ExtensionPythonObject.is(Py::_None())){
+ // ref counter is set to 1
+ auto grp = new ExtensionPy(this);
+ ExtensionPythonObject = Py::Object(grp,true);
+ }
+ return Py::new_reference_to(ExtensionPythonObject);
}
const char* Extension::name() {
diff --git a/src/Gui/ViewProviderExtension.h b/src/Gui/ViewProviderExtension.h
index 636a5d50a8..bde1f23239 100644
--- a/src/Gui/ViewProviderExtension.h
+++ b/src/Gui/ViewProviderExtension.h
@@ -97,13 +97,14 @@ public:
ViewProviderExtensionPythonT() {
ExtensionT::m_isPythonExtension = true;
+ ExtensionT::initExtension(ViewProviderExtensionPythonT::getExtensionClassTypeId());
- EXTENSION_ADD_PROPERTY(Proxy,(Py::Object()));
+ EXTENSION_ADD_PROPERTY(ExtensionProxy,(Py::Object()));
}
virtual ~ViewProviderExtensionPythonT() {
}
- App::PropertyPythonObject Proxy;
+ App::PropertyPythonObject ExtensionProxy;
};
typedef ViewProviderExtensionPythonT ViewProviderExtensionPython;
diff --git a/src/Gui/ViewProviderPy.xml b/src/Gui/ViewProviderPy.xml
index 9087834a4b..732a5d43fd 100644
--- a/src/Gui/ViewProviderPy.xml
+++ b/src/Gui/ViewProviderPy.xml
@@ -1,13 +1,13 @@
diff --git a/src/Mod/Test/Document.py b/src/Mod/Test/Document.py
index 8f1465dbc9..4c90cc77a7 100644
--- a/src/Mod/Test/Document.py
+++ b/src/Mod/Test/Document.py
@@ -234,7 +234,26 @@ class DocumentBasicCases(unittest.TestCase):
self.Doc.removeObject(obj.Name)
del obj
+ def testExtensionBugViewProvider(self):
+ class Layer():
+ def __init__(self, obj):
+ ''' Add the properties '''
+ obj.addExtension("App::GroupExtensionPython", self)
+
+ class LayerViewProvider():
+ def __init__(self, obj):
+ ''' Add the properties '''
+ obj.addExtension("Gui::ViewProviderGroupExtensionPython", self)
+ obj.Proxy = self
+
+ obj = FreeCAD.ActiveDocument.addObject("App::FeaturePython","Layer")
+ Layer(obj)
+ LayerViewProvider(obj.ViewObject)
+ self.failUnless(obj.hasExtension("App::GroupExtension"))
+ self.failUnless(obj.ViewObject.hasExtension("Gui::ViewProviderGroupExtension"))
+ self.failUnless(obj.ViewObject.hasExtension("Gui::ViewProviderGroupExtensionPython"))
+
def tearDown(self):
#closing doc
FreeCAD.closeDocument("CreateTest")