summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Tillmanns <marcus.tillmanns@qt.io>2023-05-04 09:06:46 +0200
committerMarcus Tillmanns <marcus.tillmanns@qt.io>2023-05-15 10:05:54 +0000
commitc158921af32e44e9e2850d853f83450651758dd7 (patch)
treec2abef85b670fbf1a3fd2d54b62b521c58cda456
parent12f788179ef1548b8969c158b37220d81b20fda7 (diff)
downloadqt-creator-c158921af32e44e9e2850d853f83450651758dd7.tar.gz
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>
-rw-r--r--src/libs/utils/terminalinterface.cpp2
-rw-r--r--src/plugins/projectexplorer/desktoprunconfiguration.cpp3
-rw-r--r--src/plugins/projectexplorer/runconfigurationaspects.cpp5
-rw-r--r--src/tools/process_stub/main.cpp31
4 files changed, 6 insertions, 35 deletions
diff --git a/src/libs/utils/terminalinterface.cpp b/src/libs/utils/terminalinterface.cpp
index 6972184e32..6767c16c61 100644
--- a/src/libs/utils/terminalinterface.cpp
+++ b/src/libs/utils/terminalinterface.cpp
@@ -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;
diff --git a/src/plugins/projectexplorer/desktoprunconfiguration.cpp b/src/plugins/projectexplorer/desktoprunconfiguration.cpp
index 82d0123b11..286f5c4b6e 100644
--- a/src/plugins/projectexplorer/desktoprunconfiguration.cpp
+++ b/src/plugins/projectexplorer/desktoprunconfiguration.cpp
@@ -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) {
diff --git a/src/plugins/projectexplorer/runconfigurationaspects.cpp b/src/plugins/projectexplorer/runconfigurationaspects.cpp
index 88dd720ee3..8098606afb 100644
--- a/src/plugins/projectexplorer/runconfigurationaspects.cpp
+++ b/src/plugins/projectexplorer/runconfigurationaspects.cpp
@@ -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();
}
/*!
diff --git a/src/tools/process_stub/main.cpp b/src/tools/process_stub/main.cpp
index ff3437659b..f606b06369 100644
--- a/src/tools/process_stub/main.cpp
+++ b/src/tools/process_stub/main.cpp
@@ -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);