Fix crash on firmware update dialog

This commit is contained in:
digant 2025-01-02 00:18:21 +01:00
commit b802526c07

View file

@ -398,15 +398,25 @@ void main_window::OnMissingFw()
QMessageBox* mb = new QMessageBox(QMessageBox::Question, title, message, QMessageBox::Ok | QMessageBox::Cancel, this, Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint | Qt::WindowStaysOnTopHint); QMessageBox* mb = new QMessageBox(QMessageBox::Question, title, message, QMessageBox::Ok | QMessageBox::Cancel, this, Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint | Qt::WindowStaysOnTopHint);
mb->setTextFormat(Qt::RichText); mb->setTextFormat(Qt::RichText);
mb->button(QMessageBox::Ok)->setText(tr("Locate PS3UPDAT.PUP")); mb->button(QMessageBox::Ok)->setText(tr("Locate PS3UPDAT.PUP"));
mb->setAttribute(Qt::WA_DeleteOnClose);
mb->open(); // NOTE: Qt::WA_DeleteOnClose attribute causes the dialogs invoked in InstallPup() to immediately destroy (probably a bug in Qt)
// the "mb" dialog (while still in use in the "mb"'s "accected" connection) often causing a crash due to access violation.
// So, instead of using Qt::WA_DeleteOnClose attribute, manually delete "mb" by using deleteLater() when the dialog is closed
//
//mb->setAttribute(Qt::WA_DeleteOnClose);
connect(mb, &QDialog::finished, this, [mb]()
{
mb->deleteLater();
});
connect(mb, &QDialog::accepted, this, [this]() connect(mb, &QDialog::accepted, this, [this]()
{ {
InstallPup(); InstallPup();
}); });
mb->open();
} }
void main_window::ResizeIcons(int index) void main_window::ResizeIcons(int index)
@ -2852,6 +2862,7 @@ void main_window::CreateConnects()
connect(dlg, &settings_dialog::EmuSettingsApplied, this, &main_window::NotifyEmuSettingsChange); connect(dlg, &settings_dialog::EmuSettingsApplied, this, &main_window::NotifyEmuSettingsChange);
connect(dlg, &settings_dialog::EmuSettingsApplied, this, &main_window::update_gui_pad_thread); connect(dlg, &settings_dialog::EmuSettingsApplied, this, &main_window::update_gui_pad_thread);
connect(dlg, &settings_dialog::EmuSettingsApplied, m_log_frame, &log_frame::LoadSettings); connect(dlg, &settings_dialog::EmuSettingsApplied, m_log_frame, &log_frame::LoadSettings);
dlg->setAttribute(Qt::WA_DeleteOnClose);
dlg->open(); dlg->open();
}; };