diff --git a/src/Mod/Draft/DraftGui.py b/src/Mod/Draft/DraftGui.py index 839b117cdf..86d608f7ec 100644 --- a/src/Mod/Draft/DraftGui.py +++ b/src/Mod/Draft/DraftGui.py @@ -251,13 +251,17 @@ class DraftTaskPanel: if hasattr(FreeCADGui,"draftToolBar"): return FreeCADGui.draftToolBar.validatePoint() else: - FreeCADGui.ActiveDocument.resetEdit() + if FreeCADGui.ActiveDocument: + FreeCADGui.ActiveDocument.resetEdit() return True def reject(self): FreeCADGui.draftToolBar.isTaskOn = False FreeCADGui.draftToolBar.escape() - FreeCADGui.ActiveDocument.resetEdit() + if FreeCADGui.ActiveDocument: + FreeCADGui.ActiveDocument.resetEdit() return True + def isAllowedAlterDocument(self): + return False class DraftToolBar: "main draft Toolbar" @@ -806,6 +810,8 @@ class DraftToolBar: FreeCADGui.draftToolBar.escape() FreeCADGui.ActiveDocument.resetEdit() return True + def isAllowedAlterDocument(self): + return False if FreeCADGui.Control.activeDialog(): FreeCADGui.Control.closeDialog() todo.delay(FreeCADGui.Control.showDialog,dummy(extra)) @@ -1438,7 +1444,8 @@ class DraftToolBar: if self.cancel: self.cancel() self.cancel = None - FreeCADGui.ActiveDocument.resetEdit() + if FreeCADGui.ActiveDocument: + FreeCADGui.ActiveDocument.resetEdit() def escape(self): "escapes the current command" diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index 0b32c93067..b4af0ce051 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -262,7 +262,11 @@ class DraftTool: if hasattr(FreeCADGui,"Snapper"): FreeCADGui.Snapper.off() if self.call: - self.view.removeEventCallback("SoEvent",self.call) + try: + self.view.removeEventCallback("SoEvent",self.call) + except RuntimeError: + # the view has been deleted already + pass self.call = None if self.commitList: todo.delayCommit(self.commitList) @@ -492,8 +496,13 @@ class Line(Creator): "terminates the operation and closes the poly if asked" if self.obj: # remove temporary object, if any - old = self.obj.Name - todo.delay(self.doc.removeObject,old) + try: + old = self.obj.Name + except ReferenceError: + # object already deleted, for some reason + pass + else: + todo.delay(self.doc.removeObject,old) self.obj = None if self.oldWP: FreeCAD.DraftWorkingPlane = self.oldWP