diff --git a/sources/qetapp.cpp b/sources/qetapp.cpp index 140e1e023..88f6b2642 100644 --- a/sources/qetapp.cpp +++ b/sources/qetapp.cpp @@ -1993,7 +1993,10 @@ void QETApp::configureQET() // cree le dialogue ConfigDialog cd; cd.setWindowTitle(tr("Configurer QElectroTech", "window title")); - cd.setWindowModality(Qt::WindowModal); + // ApplicationModal so no other window can dispatch events while the dialog + // holds raw pointers derived from the current project list. Same class of + // bug as ProjectPropertiesDialog — see issue #527. + cd.setWindowModality(Qt::ApplicationModal); cd.addPage(new GeneralConfigurationPage()); cd.addPage(new NewDiagramPage()); cd.addPage(new ExportConfigPage()); diff --git a/sources/ui/projectpropertiesdialog.cpp b/sources/ui/projectpropertiesdialog.cpp index f393c7ea4..b9bea1c71 100644 --- a/sources/ui/projectpropertiesdialog.cpp +++ b/sources/ui/projectpropertiesdialog.cpp @@ -63,7 +63,13 @@ ProjectPropertiesDialog::~ProjectPropertiesDialog () */ void ProjectPropertiesDialog::exec() { - m_properties_dialog->setWindowModality(Qt::WindowModal); + // ApplicationModal (not WindowModal) so no other window — including other + // MDI subwindows — can dispatch events while the dialog holds raw + // QETProject* pointers in its config pages. WindowModal only blocks the + // parent ProjectView; the rest of the MDI area stays live, which allowed + // new_project / close_project to replace the project under the dialog + // and cause a SIGSEGV. See issue #527. + m_properties_dialog->setWindowModality(Qt::ApplicationModal); m_properties_dialog -> exec(); }