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:
Marcus Tillmanns
2023-05-04 09:06:46 +02:00
parent 12f788179e
commit c158921af3
4 changed files with 6 additions and 35 deletions

View File

@@ -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;

View File

@@ -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) {

View File

@@ -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();
}
/*!

View File

@@ -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);