Fix crash when close project
At time of closing project, if a master element(may be every linkable
element) is selected and the editor dock display a lot of available
slave, qet crash.
This commit is contained in:
Laurent Trinques
2020-04-12 18:30:58 +02:00
parent 008e16eb14
commit cdf610b669

View File

@@ -1959,18 +1959,25 @@ void QETDiagramEditor::activateProject(ProjectView *project_view) {
activateWidget(project_view); activateWidget(project_view);
} }
/** /*** @brief QETDiagramEditor::projectWasClosed
Gere la fermeture d'une ProjectView * Manage the close of a project.
@param project_view ProjectView fermee * @param project_view
*/ */
void QETDiagramEditor::projectWasClosed(ProjectView *project_view) { void QETDiagramEditor::projectWasClosed(ProjectView *project_view)
{
QETProject *project = project_view -> project(); QETProject *project = project_view -> project();
if (project) { if (project)
{
pa -> elementsPanel().projectWasClosed(project); pa -> elementsPanel().projectWasClosed(project);
m_element_collection_widget->removeProject(project); m_element_collection_widget->removeProject(project);
undo_group.removeStack(project -> undoStack()); undo_group.removeStack(project -> undoStack());
QETApp::unregisterProject(project); QETApp::unregisterProject(project);
} }
//When project is closed, a lot of signal are emited, notably if there is an item selected in a diagram.
//In some special case, since signal/slot connection can be direct or queued, some signal are handled after QObject is deleted, and crash qet
//notably in the function Diagram::elements when she call items() (I don't know exactly why).
//set nullptr to "m_selection_properties_editor->setDiagram()" fix this crash
m_selection_properties_editor->setDiagram(nullptr);
project_view -> deleteLater(); project_view -> deleteLater();
project -> deleteLater(); project -> deleteLater();
} }
@@ -2175,7 +2182,7 @@ void QETDiagramEditor::removeDiagramFromProject() {
*/ */
void QETDiagramEditor::diagramWasAdded(DiagramView *dv) void QETDiagramEditor::diagramWasAdded(DiagramView *dv)
{ {
connect(dv, SIGNAL(selectionChanged()), this, SLOT(selectionChanged())); connect(dv, SIGNAL(modeChanged()), this, SLOT(slot_updateModeActions()));
connect(dv, SIGNAL(modeChanged()), this, SLOT(slot_updateModeActions())); connect(dv, SIGNAL(modeChanged()), this, SLOT(slot_updateModeActions()));
} }