From 3071cc847ce8f52aafd417c2c9fd78b934c61842 Mon Sep 17 00:00:00 2001 From: pjcreath Date: Sun, 9 Nov 2025 21:04:22 -0500 Subject: [PATCH] Gui: Fix crash in measuring tool after an undo. (#25129) Co-authored-by: Chris Hennes --- src/Mod/Measure/Gui/TaskMeasure.cpp | 14 ++++++++++++++ src/Mod/Measure/Gui/TaskMeasure.h | 5 +++++ 2 files changed, 19 insertions(+) diff --git a/src/Mod/Measure/Gui/TaskMeasure.cpp b/src/Mod/Measure/Gui/TaskMeasure.cpp index e6f7f3636b..2ba8a302da 100644 --- a/src/Mod/Measure/Gui/TaskMeasure.cpp +++ b/src/Mod/Measure/Gui/TaskMeasure.cpp @@ -163,6 +163,12 @@ TaskMeasure::TaskMeasure() // engage the selectionObserver attachSelection(); + if (auto* doc = App::GetApplication().getActiveDocument()) { + m_deletedConnection = doc->signalDeletedObject.connect([this](auto&& obj) { + onObjectDeleted(obj); + }); + } + if (!App::GetApplication().getActiveTransaction()) { App::GetApplication().setActiveTransaction("Add Measurement"); } @@ -174,6 +180,7 @@ TaskMeasure::TaskMeasure() TaskMeasure::~TaskMeasure() { + m_deletedConnection.disconnect(); Gui::Selection().setSelectionStyle(SelectionStyle::NormalSelection); detachSelection(); } @@ -524,6 +531,13 @@ void TaskMeasure::quitMeasurement() } } +void TaskMeasure::onObjectDeleted(const App::DocumentObject& obj) +{ + if (&obj == _mMeasureObject) { + _mMeasureObject = nullptr; + } +} + void TaskMeasure::setDeltaPossible(bool possible) { showDelta->setVisible(possible); diff --git a/src/Mod/Measure/Gui/TaskMeasure.h b/src/Mod/Measure/Gui/TaskMeasure.h index 11193c5ee9..0ad2be45ce 100644 --- a/src/Mod/Measure/Gui/TaskMeasure.h +++ b/src/Mod/Measure/Gui/TaskMeasure.h @@ -43,6 +43,8 @@ #include #include +#include + namespace MeasureGui { @@ -74,6 +76,7 @@ private: void setupShortcuts(QWidget* parent); void tryUpdate(); void onSelectionChanged(const Gui::SelectionChanges& msg) override; + void onObjectDeleted(const App::DocumentObject& obj); void saveMeasurement(); void quitMeasurement(); @@ -87,6 +90,8 @@ private: QAction* newMeasurementBehaviourAction {nullptr}; QToolButton* mSettings {nullptr}; + boost::signals2::connection m_deletedConnection; + void removeObject(); void onModeChanged(int index); void showDeltaChanged(int checkState);