forked from qt-creator/qt-creator
ProjectExplorer: Don't allow remote run in terminal
Currently the process stub does not support starting / debugging processes on remote devices. To reflect this the "Run In Terminal" aspect is disabled for remote targets. Fixes: QTCREATORBUG-29058 Change-Id: I9b3bcd65d4db468c683f2743a49227bfbecaf3d3 Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -183,8 +183,6 @@ void TerminalInterface::onStubReadyRead()
|
||||
emitFinished(out.mid(5).toInt(), QProcess::NormalExit);
|
||||
} else if (out.startsWith("crash ")) {
|
||||
emitFinished(out.mid(6).toInt(), QProcess::CrashExit);
|
||||
} else if (out.startsWith("qtc: ")) {
|
||||
emit readyRead(out.mid(5) + "\n", {});
|
||||
} else {
|
||||
emitError(QProcess::UnknownError, msgUnexpectedOutput(out));
|
||||
break;
|
||||
|
@@ -87,7 +87,8 @@ void DesktopRunConfiguration::updateTargetInformation()
|
||||
BuildTargetInfo bti = buildTargetInfo();
|
||||
|
||||
auto terminalAspect = aspect<TerminalAspect>();
|
||||
terminalAspect->setUseTerminalHint(bti.usesTerminal);
|
||||
terminalAspect->setUseTerminalHint(bti.targetFilePath.needsDevice() ? false : bti.usesTerminal);
|
||||
terminalAspect->setEnabled(!bti.targetFilePath.needsDevice());
|
||||
|
||||
if (m_kind == Qmake) {
|
||||
|
||||
|
@@ -65,8 +65,9 @@ TerminalAspect::TerminalAspect()
|
||||
void TerminalAspect::addToLayout(LayoutItem &parent)
|
||||
{
|
||||
QTC_CHECK(!m_checkBox);
|
||||
m_checkBox = new QCheckBox(Tr::tr("Run in terminal"));
|
||||
m_checkBox = createSubWidget<QCheckBox>(Tr::tr("Run in terminal"));
|
||||
m_checkBox->setChecked(m_useTerminal);
|
||||
m_checkBox->setEnabled(isEnabled());
|
||||
parent.addItems({{}, m_checkBox.data()});
|
||||
connect(m_checkBox.data(), &QAbstractButton::clicked, this, [this] {
|
||||
m_userSet = true;
|
||||
@@ -123,7 +124,7 @@ void TerminalAspect::calculateUseTerminal()
|
||||
*/
|
||||
bool TerminalAspect::useTerminal() const
|
||||
{
|
||||
return m_useTerminal;
|
||||
return m_useTerminal && isEnabled();
|
||||
}
|
||||
|
||||
/*!
|
||||
|
@@ -137,11 +137,6 @@ void sendMsg(const QByteArray &msg)
|
||||
}
|
||||
}
|
||||
|
||||
void sendQtcMarker(const QByteArray &marker)
|
||||
{
|
||||
sendMsg(QByteArray("qtc: ") + marker + "\n");
|
||||
}
|
||||
|
||||
void sendPid(int inferiorPid)
|
||||
{
|
||||
sendMsg(QString("pid %1\n").arg(inferiorPid).toUtf8());
|
||||
@@ -317,31 +312,7 @@ void startProcess(const QString &executable, const QStringList &arguments, const
|
||||
QCoreApplication::instance(),
|
||||
&onInferiorStarted);
|
||||
|
||||
inferiorProcess.setProcessChannelMode(QProcess::SeparateChannels);
|
||||
|
||||
QObject::connect(&inferiorProcess,
|
||||
&QProcess::readyReadStandardOutput,
|
||||
QCoreApplication::instance(),
|
||||
[] {
|
||||
const QByteArray data = inferiorProcess.readAllStandardOutput();
|
||||
static bool isFirst = true;
|
||||
if (isFirst) {
|
||||
isFirst = false;
|
||||
if (data.startsWith("__qtc")) {
|
||||
int lineBreak = data.indexOf("\r\n");
|
||||
sendQtcMarker(data.mid(0, lineBreak));
|
||||
if (lineBreak != -1)
|
||||
writeToOut(data.mid(lineBreak + 2), Out::StdOut);
|
||||
return;
|
||||
}
|
||||
}
|
||||
writeToOut(data, Out::StdOut);
|
||||
});
|
||||
|
||||
QObject::connect(&inferiorProcess,
|
||||
&QProcess::readyReadStandardError,
|
||||
QCoreApplication::instance(),
|
||||
[] { writeToOut(inferiorProcess.readAllStandardError(), Out::StdErr); });
|
||||
inferiorProcess.setProcessChannelMode(QProcess::ForwardedChannels);
|
||||
|
||||
if (!(testMode && debugMode))
|
||||
inferiorProcess.setInputChannelMode(QProcess::ForwardedInputChannel);
|
||||
|
Reference in New Issue
Block a user