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);
|
emitFinished(out.mid(5).toInt(), QProcess::NormalExit);
|
||||||
} else if (out.startsWith("crash ")) {
|
} else if (out.startsWith("crash ")) {
|
||||||
emitFinished(out.mid(6).toInt(), QProcess::CrashExit);
|
emitFinished(out.mid(6).toInt(), QProcess::CrashExit);
|
||||||
} else if (out.startsWith("qtc: ")) {
|
|
||||||
emit readyRead(out.mid(5) + "\n", {});
|
|
||||||
} else {
|
} else {
|
||||||
emitError(QProcess::UnknownError, msgUnexpectedOutput(out));
|
emitError(QProcess::UnknownError, msgUnexpectedOutput(out));
|
||||||
break;
|
break;
|
||||||
|
@@ -87,7 +87,8 @@ void DesktopRunConfiguration::updateTargetInformation()
|
|||||||
BuildTargetInfo bti = buildTargetInfo();
|
BuildTargetInfo bti = buildTargetInfo();
|
||||||
|
|
||||||
auto terminalAspect = aspect<TerminalAspect>();
|
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) {
|
if (m_kind == Qmake) {
|
||||||
|
|
||||||
|
@@ -65,8 +65,9 @@ TerminalAspect::TerminalAspect()
|
|||||||
void TerminalAspect::addToLayout(LayoutItem &parent)
|
void TerminalAspect::addToLayout(LayoutItem &parent)
|
||||||
{
|
{
|
||||||
QTC_CHECK(!m_checkBox);
|
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->setChecked(m_useTerminal);
|
||||||
|
m_checkBox->setEnabled(isEnabled());
|
||||||
parent.addItems({{}, m_checkBox.data()});
|
parent.addItems({{}, m_checkBox.data()});
|
||||||
connect(m_checkBox.data(), &QAbstractButton::clicked, this, [this] {
|
connect(m_checkBox.data(), &QAbstractButton::clicked, this, [this] {
|
||||||
m_userSet = true;
|
m_userSet = true;
|
||||||
@@ -123,7 +124,7 @@ void TerminalAspect::calculateUseTerminal()
|
|||||||
*/
|
*/
|
||||||
bool TerminalAspect::useTerminal() const
|
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)
|
void sendPid(int inferiorPid)
|
||||||
{
|
{
|
||||||
sendMsg(QString("pid %1\n").arg(inferiorPid).toUtf8());
|
sendMsg(QString("pid %1\n").arg(inferiorPid).toUtf8());
|
||||||
@@ -317,31 +312,7 @@ void startProcess(const QString &executable, const QStringList &arguments, const
|
|||||||
QCoreApplication::instance(),
|
QCoreApplication::instance(),
|
||||||
&onInferiorStarted);
|
&onInferiorStarted);
|
||||||
|
|
||||||
inferiorProcess.setProcessChannelMode(QProcess::SeparateChannels);
|
inferiorProcess.setProcessChannelMode(QProcess::ForwardedChannels);
|
||||||
|
|
||||||
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); });
|
|
||||||
|
|
||||||
if (!(testMode && debugMode))
|
if (!(testMode && debugMode))
|
||||||
inferiorProcess.setInputChannelMode(QProcess::ForwardedInputChannel);
|
inferiorProcess.setInputChannelMode(QProcess::ForwardedInputChannel);
|
||||||
|
Reference in New Issue
Block a user