diff --git a/src/Gui/Inventor/Draggers/SoTransformDragger.cpp b/src/Gui/Inventor/Draggers/SoTransformDragger.cpp index dfdfd913ee..cb857e23bf 100644 --- a/src/Gui/Inventor/Draggers/SoTransformDragger.cpp +++ b/src/Gui/Inventor/Draggers/SoTransformDragger.cpp @@ -489,7 +489,14 @@ void SoTransformDragger::setUpAutoScale(SoCamera* cameraIn) cameraSensor.attach(&localCamera->height); SoScale* localScaleNode = SO_GET_ANY_PART(this, "scaleNode", SoScale); localScaleNode->scaleFactor.disconnect(); - autoScaleResult.disconnect(&draggerSize); + // This check shouldn't be needed but since CAM has its own + // ViewProvider classes that implement setEdit but doesn't inherit from + // ViewProviderDragger, we need to call Std_TransformManip twice. + // This causes setEditViewer to be called twice and Coin throws an error + // for trying to disconnect twice. + if (autoScaleResult.isConnectedFromField()) { + autoScaleResult.disconnect(&draggerSize); + } cameraCB(this, nullptr); } else if (cameraIn->getTypeId() == SoPerspectiveCamera::getClassTypeId()) { @@ -498,7 +505,9 @@ void SoTransformDragger::setUpAutoScale(SoCamera* cameraIn) cameraSensor.attach(&localCamera->position); SoScale* localScaleNode = SO_GET_ANY_PART(this, "scaleNode", SoScale); localScaleNode->scaleFactor.disconnect(); - autoScaleResult.disconnect(&draggerSize); + if (autoScaleResult.isConnectedFromField()) { + autoScaleResult.disconnect(&draggerSize); + } cameraCB(this, nullptr); } } diff --git a/src/Mod/CAM/Path/Base/Gui/IconViewProvider.py b/src/Mod/CAM/Path/Base/Gui/IconViewProvider.py index b97c343a67..2c8f443bba 100644 --- a/src/Mod/CAM/Path/Base/Gui/IconViewProvider.py +++ b/src/Mod/CAM/Path/Base/Gui/IconViewProvider.py @@ -21,6 +21,7 @@ # *************************************************************************** import FreeCAD +import FreeCADGui import Path import importlib @@ -83,10 +84,14 @@ class ViewProvider(object): def setEdit(self, vobj=None, mode=0): if 0 == mode: self._onEditCallback(True) + elif 1 == mode: + FreeCADGui.runCommand("Std_TransformManip") + return True return False - def unsetEdit(self, arg1, arg2): - self._onEditCallback(False) + def unsetEdit(self, vobj, mode): + if 0 == mode: + self._onEditCallback(False) def setupContextMenu(self, vobj, menu): Path.Log.track()