diff --git a/src/Mod/Part/App/AttachableObject.cpp b/src/Mod/Part/App/AttachableObject.cpp
index 8fce2ed3e..300920a2d 100644
--- a/src/Mod/Part/App/AttachableObject.cpp
+++ b/src/Mod/Part/App/AttachableObject.cpp
@@ -28,6 +28,7 @@
#include "AttachableObject.h"
#include
+#include
@@ -95,6 +96,14 @@ App::DocumentObjectExecReturn *AttachableObject::execute()
return Part::Feature::execute();
}
+void setReadonlyness(App::Property &prop, bool on)
+{
+ unsigned long status = prop.getStatus();
+ prop.setStatus(App::Property::ReadOnly, on);
+ if (status != prop.getStatus())
+ App::GetApplication().signalChangePropertyEditor(prop);
+}
+
void AttachableObject::onChanged(const App::Property* prop)
{
if(! this->isRestoring()){
@@ -103,8 +112,14 @@ void AttachableObject::onChanged(const App::Property* prop)
|| prop == &MapMode
|| prop == &MapPathParameter
|| prop == &MapReversed
- || prop == &superPlacement))
+ || prop == &superPlacement)){
+
+ eMapMode mmode = eMapMode(this->MapMode.getValue());
+ setReadonlyness(this->superPlacement, mmode == mmDeactivated);
+ setReadonlyness(this->Placement, mmode != mmDeactivated && mmode != mmTranslate);
+
positionBySupport();
+ }
} catch (Base::Exception &e) {
this->setError();
Base::Console().Error("PositionBySupport: %s",e.what());