Gui: Fix crash in placement window after closing a document. (#25110)

Fixes #18156
This commit is contained in:
pjcreath
2025-11-10 12:03:05 -05:00
committed by GitHub
parent 78208bb227
commit 378e95327f
2 changed files with 12 additions and 0 deletions

View File

@@ -57,6 +57,7 @@ void ExpressionBinding::unbind()
{
expressionchanged.disconnect();
objectdeleted.disconnect();
documentdeleted.disconnect();
path = App::ObjectIdentifier();
}
@@ -106,6 +107,8 @@ void ExpressionBinding::bind(const App::ObjectIdentifier &_path)
expressionchanged = docObj->ExpressionEngine.expressionChanged.connect(std::bind(&ExpressionBinding::expressionChange, this, sp::_1));
App::Document* doc = docObj->getDocument();
objectdeleted = doc->signalDeletedObject.connect(std::bind(&ExpressionBinding::objectDeleted, this, sp::_1));
documentdeleted = App::GetApplication().signalDeleteDocument.connect(
std::bind(&ExpressionBinding::onDocumentDeleted, this, sp::_1));
//NOLINTEND
}
}
@@ -272,6 +275,13 @@ void ExpressionBinding::objectDeleted(const App::DocumentObject& obj)
}
}
void ExpressionBinding::onDocumentDeleted(const App::Document& doc)
{
if (path.getOwner() && path.getOwner()->getDocument() == &doc) {
unbind();
}
}
// ----------------------------------------------------------------------------
ExpressionWidget::ExpressionWidget() = default;

View File

@@ -76,8 +76,10 @@ private:
protected:
void expressionChange(const App::ObjectIdentifier& id);
void objectDeleted(const App::DocumentObject&);
void onDocumentDeleted(const App::Document&);
boost::signals2::scoped_connection expressionchanged;
boost::signals2::scoped_connection objectdeleted;
boost::signals2::scoped_connection documentdeleted;
bool m_autoApply{false};
};