From 6ccca8b9ad56b0a617fc50afb68d8fcb313e8cf2 Mon Sep 17 00:00:00 2001 From: Roy-043 Date: Mon, 7 Oct 2024 09:52:35 +0200 Subject: [PATCH] Draft: Stop draftToolBar.escape() executing multiple times Fixes #17027. The `DraftTaskPanel.reject()` function can be called multiple times if Esc is pressed during a fast mouse move. We need to prevent multiple calls to `draftToolBar.escape()` as this will lead to multiple calls to `gui_utils.end_all_events()` which results in a crash. --- src/Mod/Draft/DraftGui.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/Mod/Draft/DraftGui.py b/src/Mod/Draft/DraftGui.py index 4536b3a560..bc5fd43d51 100644 --- a/src/Mod/Draft/DraftGui.py +++ b/src/Mod/Draft/DraftGui.py @@ -140,6 +140,12 @@ class DraftTaskPanel: FreeCADGui.ActiveDocument.resetEdit() return True def reject(self): + # https://github.com/FreeCAD/FreeCAD/issues/17027 + # Function can be called multiple times if Esc is pressed during mouse + # move. We need to prevent multiple calls to draftToolBar.escape(): + if getattr(FreeCAD, "activeDraftCommand", None) is None: + return + FreeCAD.activeDraftCommand = None FreeCADGui.draftToolBar.isTaskOn = False FreeCADGui.draftToolBar.escape() if FreeCADGui.ActiveDocument: