Gui: Fix crash in placement window after closing a document. (#25110)
Fixes #18156
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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};
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user