forked from qt-creator/qt-creator
New Dialog: Don't not stay in NewDialog after calling QDialog::accept
Accept closes the dialog, and the dialog is flagged as DeleteOnClose. So
we may not run the wizard from it directly.
Regression introduced by 2cd5b448e1
Change-Id: Ic2e4ed436cb8f9e02cc987ff5156c2c4e832b4fb
Task-number: QTCREATORBUG-15968
Reviewed-by: Tobias Hunger <tobias.hunger@theqtcompany.com>
This commit is contained in:
@@ -41,6 +41,7 @@
|
|||||||
#include <QPushButton>
|
#include <QPushButton>
|
||||||
#include <QSortFilterProxyModel>
|
#include <QSortFilterProxyModel>
|
||||||
#include <QStandardItem>
|
#include <QStandardItem>
|
||||||
|
#include <QTimer>
|
||||||
|
|
||||||
Q_DECLARE_METATYPE(Core::IWizardFactory*)
|
Q_DECLARE_METATYPE(Core::IWizardFactory*)
|
||||||
|
|
||||||
@@ -458,17 +459,25 @@ void NewDialog::saveState()
|
|||||||
ICore::settings()->setValue(QLatin1String(LAST_PLATFORM_KEY), m_ui->comboBox->currentData());
|
ICore::settings()->setValue(QLatin1String(LAST_PLATFORM_KEY), m_ui->comboBox->currentData());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void runWizard(IWizardFactory *wizard, const QString &defaultLocation, Id platform,
|
||||||
|
const QVariantMap &variables)
|
||||||
|
{
|
||||||
|
QString path = wizard->runPath(defaultLocation);
|
||||||
|
wizard->runWizard(path, ICore::dialogParent(), platform, variables);
|
||||||
|
}
|
||||||
|
|
||||||
void NewDialog::accept()
|
void NewDialog::accept()
|
||||||
{
|
{
|
||||||
saveState();
|
saveState();
|
||||||
QDialog::accept();
|
|
||||||
|
|
||||||
if (m_ui->templatesView->currentIndex().isValid()) {
|
if (m_ui->templatesView->currentIndex().isValid()) {
|
||||||
IWizardFactory *wizard = currentWizardFactory();
|
IWizardFactory *wizard = currentWizardFactory();
|
||||||
QTC_ASSERT(wizard, accept(); return);
|
QTC_CHECK(wizard);
|
||||||
QString path = wizard->runPath(m_defaultLocation);
|
if (wizard) {
|
||||||
wizard->runWizard(path, ICore::dialogParent(), selectedPlatform(), m_extraVariables);
|
QTimer::singleShot(0, std::bind(&runWizard, wizard, m_defaultLocation,
|
||||||
|
selectedPlatform(), m_extraVariables));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
QDialog::accept();
|
||||||
}
|
}
|
||||||
|
|
||||||
void NewDialog::reject()
|
void NewDialog::reject()
|
||||||
|
Reference in New Issue
Block a user