diff --git a/src/plugins/debugger/debuggerrunner.cpp b/src/plugins/debugger/debuggerrunner.cpp index aae1346567010c5e9742a75f2629d3de69f2b8b1..db59fd1b15062f4cd392dfe4ce280ef0f855b67e 100644 --- a/src/plugins/debugger/debuggerrunner.cpp +++ b/src/plugins/debugger/debuggerrunner.cpp @@ -717,7 +717,6 @@ static DebuggerStartParameters localStartParameters(RunConfiguration *runConfigu qobject_cast<LocalApplicationRunConfiguration *>(runConfiguration); QTC_ASSERT(rc, return sp); - sp.startMode = StartInternal; sp.environment = rc->environment(); sp.workingDirectory = rc->workingDirectory(); @@ -727,6 +726,9 @@ static DebuggerStartParameters localStartParameters(RunConfiguration *runConfigu #endif sp.executable = rc->executable(); + if (sp.executable.isEmpty()) + return sp; + sp.startMode = StartInternal; sp.processArgs = rc->commandLineArguments(); sp.toolChainAbi = rc->abi(); if (!sp.toolChainAbi.isValid()) { @@ -784,6 +786,8 @@ RunControl *DebuggerRunControlFactory::create { QTC_ASSERT(mode == Constants::DEBUGMODE || mode == Constants::DEBUGMODE2, return 0); DebuggerStartParameters sp = localStartParameters(runConfiguration); + if (sp.startMode == NoStartMode) + return 0; if (mode == Constants::DEBUGMODE2) sp.breakOnMain = true; return create(sp, runConfiguration); diff --git a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp index 8cb89f70d755664456660e5181a82b310d529d4d..8dc30c72d8a6b72e7f66ec13f8ff8dd88b214f61 100644 --- a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp +++ b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp @@ -128,9 +128,12 @@ QString CustomExecutableRunConfiguration::executable() const if (exec.isEmpty() || !QFileInfo(exec).exists()) { // Oh the executable doesn't exists, ask the user. - QWidget *confWidget = const_cast<CustomExecutableRunConfiguration *>(this)->createConfigurationWidget(); + CustomExecutableRunConfiguration *that = const_cast<CustomExecutableRunConfiguration *>(this); + QWidget *confWidget = that->createConfigurationWidget(); confWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); QDialog dialog(Core::ICore::instance()->mainWindow()); + dialog.setWindowTitle(displayName()); + dialog.setWindowFlags(dialog.windowFlags() & ~Qt::WindowContextHelpButtonHint); dialog.setLayout(new QVBoxLayout()); QLabel *label = new QLabel(tr("Could not find the executable, please specify one.")); label->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); @@ -146,14 +149,18 @@ QString CustomExecutableRunConfiguration::executable() const QString oldWorkingDirectory = m_workingDirectory; QString oldCmdArguments = m_cmdArguments; - if (dialog.exec()) { + if (dialog.exec() == QDialog::Accepted) { return executable(); } else { - CustomExecutableRunConfiguration *that = const_cast<CustomExecutableRunConfiguration *>(this); - that->m_executable = oldExecutable; - that->m_workingDirectory = oldWorkingDirectory; - that->m_cmdArguments = oldCmdArguments; - emit that->changed(); + // Restore values changed by the configuration widget. + if (that->m_executable != oldExecutable + || that->m_workingDirectory != oldWorkingDirectory + || that->m_cmdArguments != oldCmdArguments) { + that->m_executable = oldExecutable; + that->m_workingDirectory = oldWorkingDirectory; + that->m_cmdArguments = oldCmdArguments; + emit that->changed(); + } return QString(); } } diff --git a/src/plugins/projectexplorer/localapplicationruncontrol.cpp b/src/plugins/projectexplorer/localapplicationruncontrol.cpp index 85c90cdbd35cb957d5b8729140684720b0af1597..2ab3cfbd0fa8ae0738de733cddfca2dab79a851d 100644 --- a/src/plugins/projectexplorer/localapplicationruncontrol.cpp +++ b/src/plugins/projectexplorer/localapplicationruncontrol.cpp @@ -67,7 +67,11 @@ QString LocalApplicationRunControlFactory::displayName() const RunControl *LocalApplicationRunControlFactory::create(ProjectExplorer::RunConfiguration *runConfiguration, const QString &mode) { QTC_ASSERT(canRun(runConfiguration, mode), return 0); - return new LocalApplicationRunControl(qobject_cast<LocalApplicationRunConfiguration *>(runConfiguration), mode); + LocalApplicationRunConfiguration *localRunConfiguration = qobject_cast<LocalApplicationRunConfiguration *>(runConfiguration); + // Force the dialog about executables at this point and fail if there is none + if (localRunConfiguration->executable().isEmpty()) + return 0; + return new LocalApplicationRunControl(localRunConfiguration, mode); } RunConfigWidget *LocalApplicationRunControlFactory::createConfigurationWidget(RunConfiguration *runConfiguration)