forked from qt-creator/qt-creator
ConsoleProcess: Make setSettings() a static member
Since it's not possible to use directly ICore::settings() inside Utils lib, make setSettings() a static member. This simplifies the API of other static methods. Set the settings just once now, inside main(). Change-Id: I2bcc58d4d29b5aba4a1a21a98a9f4245b24b530f Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -33,6 +33,7 @@
|
|||||||
#include <qtsingleapplication.h>
|
#include <qtsingleapplication.h>
|
||||||
|
|
||||||
#include <utils/algorithm.h>
|
#include <utils/algorithm.h>
|
||||||
|
#include <utils/consoleprocess.h>
|
||||||
#include <utils/environment.h>
|
#include <utils/environment.h>
|
||||||
#include <utils/fileutils.h>
|
#include <utils/fileutils.h>
|
||||||
#include <utils/hostosinfo.h>
|
#include <utils/hostosinfo.h>
|
||||||
@@ -551,6 +552,7 @@ int main(int argc, char **argv)
|
|||||||
QSettings::SystemScope,
|
QSettings::SystemScope,
|
||||||
QLatin1String(Core::Constants::IDE_SETTINGSVARIANT_STR),
|
QLatin1String(Core::Constants::IDE_SETTINGSVARIANT_STR),
|
||||||
QLatin1String(Core::Constants::IDE_CASED_ID));
|
QLatin1String(Core::Constants::IDE_CASED_ID));
|
||||||
|
Utils::ConsoleProcess::setSettings(settings);
|
||||||
loadFonts();
|
loadFonts();
|
||||||
|
|
||||||
if (Utils::HostOsInfo::isWindowsHost()
|
if (Utils::HostOsInfo::isWindowsHost()
|
||||||
|
|||||||
@@ -118,6 +118,8 @@ static QString msgCannotExecute(const QString & p, const QString &why)
|
|||||||
return ConsoleProcess::tr("Cannot execute \"%1\": %2").arg(p, why);
|
return ConsoleProcess::tr("Cannot execute \"%1\": %2").arg(p, why);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static QSettings *s_settings = nullptr;
|
||||||
|
|
||||||
// TerminalCommand
|
// TerminalCommand
|
||||||
|
|
||||||
TerminalCommand::TerminalCommand(const QString &command, const QString &openArgs, const QString &executeArgs, bool needsQuotes)
|
TerminalCommand::TerminalCommand(const QString &command, const QString &openArgs, const QString &executeArgs, bool needsQuotes)
|
||||||
@@ -149,7 +151,6 @@ public:
|
|||||||
QString m_errorString;
|
QString m_errorString;
|
||||||
bool m_abortOnMetaChars = true;
|
bool m_abortOnMetaChars = true;
|
||||||
bool m_runAsRoot = false;
|
bool m_runAsRoot = false;
|
||||||
QSettings *m_settings = nullptr;
|
|
||||||
|
|
||||||
// Used on Unix only
|
// Used on Unix only
|
||||||
QtcProcess m_process;
|
QtcProcess m_process;
|
||||||
@@ -197,7 +198,7 @@ const CommandLine &ConsoleProcess::commandLine() const
|
|||||||
|
|
||||||
void ConsoleProcess::setSettings(QSettings *settings)
|
void ConsoleProcess::setSettings(QSettings *settings)
|
||||||
{
|
{
|
||||||
d->m_settings = settings;
|
s_settings = settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
Q_GLOBAL_STATIC_WITH_ARGS(const QVector<TerminalCommand>, knownTerminals, (
|
Q_GLOBAL_STATIC_WITH_ARGS(const QVector<TerminalCommand>, knownTerminals, (
|
||||||
@@ -271,17 +272,17 @@ const char kTerminalCommandKey[] = "General/Terminal/Command";
|
|||||||
const char kTerminalOpenOptionsKey[] = "General/Terminal/OpenOptions";
|
const char kTerminalOpenOptionsKey[] = "General/Terminal/OpenOptions";
|
||||||
const char kTerminalExecuteOptionsKey[] = "General/Terminal/ExecuteOptions";
|
const char kTerminalExecuteOptionsKey[] = "General/Terminal/ExecuteOptions";
|
||||||
|
|
||||||
TerminalCommand ConsoleProcess::terminalEmulator(const QSettings *settings)
|
TerminalCommand ConsoleProcess::terminalEmulator()
|
||||||
{
|
{
|
||||||
if (settings && HostOsInfo::isAnyUnixHost()) {
|
if (s_settings && HostOsInfo::isAnyUnixHost()) {
|
||||||
if (settings->value(kTerminalVersionKey).toString() == kTerminalVersion) {
|
if (s_settings->value(kTerminalVersionKey).toString() == kTerminalVersion) {
|
||||||
if (settings->contains(kTerminalCommandKey))
|
if (s_settings->contains(kTerminalCommandKey))
|
||||||
return {settings->value(kTerminalCommandKey).toString(),
|
return {s_settings->value(kTerminalCommandKey).toString(),
|
||||||
settings->value(kTerminalOpenOptionsKey).toString(),
|
s_settings->value(kTerminalOpenOptionsKey).toString(),
|
||||||
settings->value(kTerminalExecuteOptionsKey).toString()};
|
s_settings->value(kTerminalExecuteOptionsKey).toString()};
|
||||||
} else {
|
} else {
|
||||||
// TODO remove reading of old settings some time after 4.8
|
// TODO remove reading of old settings some time after 4.8
|
||||||
const QString value = settings->value("General/TerminalEmulator").toString().trimmed();
|
const QString value = s_settings->value("General/TerminalEmulator").toString().trimmed();
|
||||||
if (!value.isEmpty()) {
|
if (!value.isEmpty()) {
|
||||||
// split off command and options
|
// split off command and options
|
||||||
const QStringList splitCommand = ProcessArgs::splitArgs(value);
|
const QStringList splitCommand = ProcessArgs::splitArgs(value);
|
||||||
@@ -299,18 +300,18 @@ TerminalCommand ConsoleProcess::terminalEmulator(const QSettings *settings)
|
|||||||
return defaultTerminalEmulator();
|
return defaultTerminalEmulator();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConsoleProcess::setTerminalEmulator(QSettings *settings, const TerminalCommand &term)
|
void ConsoleProcess::setTerminalEmulator(const TerminalCommand &term)
|
||||||
{
|
{
|
||||||
if (HostOsInfo::isAnyUnixHost()) {
|
if (s_settings && HostOsInfo::isAnyUnixHost()) {
|
||||||
settings->setValue(kTerminalVersionKey, kTerminalVersion);
|
s_settings->setValue(kTerminalVersionKey, kTerminalVersion);
|
||||||
if (term == defaultTerminalEmulator()) {
|
if (term == defaultTerminalEmulator()) {
|
||||||
settings->remove(kTerminalCommandKey);
|
s_settings->remove(kTerminalCommandKey);
|
||||||
settings->remove(kTerminalOpenOptionsKey);
|
s_settings->remove(kTerminalOpenOptionsKey);
|
||||||
settings->remove(kTerminalExecuteOptionsKey);
|
s_settings->remove(kTerminalExecuteOptionsKey);
|
||||||
} else {
|
} else {
|
||||||
settings->setValue(kTerminalCommandKey, term.command);
|
s_settings->setValue(kTerminalCommandKey, term.command);
|
||||||
settings->setValue(kTerminalOpenOptionsKey, term.openArgs);
|
s_settings->setValue(kTerminalOpenOptionsKey, term.openArgs);
|
||||||
settings->setValue(kTerminalExecuteOptionsKey, term.executeArgs);
|
s_settings->setValue(kTerminalExecuteOptionsKey, term.executeArgs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -373,12 +374,9 @@ QString createWinCommandline(const QString &program, const QString &args)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool ConsoleProcess::startTerminalEmulator(QSettings *settings, const QString &workingDir,
|
bool ConsoleProcess::startTerminalEmulator(const QString &workingDir, const Environment &env)
|
||||||
const Environment &env)
|
|
||||||
{
|
{
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
Q_UNUSED(settings)
|
|
||||||
|
|
||||||
STARTUPINFO si;
|
STARTUPINFO si;
|
||||||
ZeroMemory(&si, sizeof(si));
|
ZeroMemory(&si, sizeof(si));
|
||||||
si.cb = sizeof(si);
|
si.cb = sizeof(si);
|
||||||
@@ -407,7 +405,7 @@ bool ConsoleProcess::startTerminalEmulator(QSettings *settings, const QString &w
|
|||||||
|
|
||||||
return success;
|
return success;
|
||||||
#else
|
#else
|
||||||
const TerminalCommand term = terminalEmulator(settings);
|
const TerminalCommand term = terminalEmulator();
|
||||||
QProcess process;
|
QProcess process;
|
||||||
process.setProgram(term.command);
|
process.setProgram(term.command);
|
||||||
process.setArguments(ProcessArgs::splitArgs(term.openArgs));
|
process.setArguments(ProcessArgs::splitArgs(term.openArgs));
|
||||||
@@ -569,7 +567,7 @@ void ConsoleProcess::start()
|
|||||||
}
|
}
|
||||||
|
|
||||||
ProcessArgs::SplitError qerr;
|
ProcessArgs::SplitError qerr;
|
||||||
const TerminalCommand terminal = terminalEmulator(d->m_settings);
|
const TerminalCommand terminal = terminalEmulator();
|
||||||
const ProcessArgs terminalArgs = ProcessArgs::prepareArgs(terminal.executeArgs,
|
const ProcessArgs terminalArgs = ProcessArgs::prepareArgs(terminal.executeArgs,
|
||||||
&qerr,
|
&qerr,
|
||||||
HostOsInfo::hostOs(),
|
HostOsInfo::hostOs(),
|
||||||
|
|||||||
@@ -99,15 +99,12 @@ public:
|
|||||||
int exitCode() const;
|
int exitCode() const;
|
||||||
QProcess::ExitStatus exitStatus() const;
|
QProcess::ExitStatus exitStatus() const;
|
||||||
|
|
||||||
void setSettings(QSettings *);
|
static void setSettings(QSettings *settings);
|
||||||
|
|
||||||
static TerminalCommand defaultTerminalEmulator();
|
static TerminalCommand defaultTerminalEmulator();
|
||||||
static QVector<TerminalCommand> availableTerminalEmulators();
|
static QVector<TerminalCommand> availableTerminalEmulators();
|
||||||
static TerminalCommand terminalEmulator(const QSettings *settings);
|
static TerminalCommand terminalEmulator();
|
||||||
static void setTerminalEmulator(QSettings *settings, const TerminalCommand &term);
|
static void setTerminalEmulator(const TerminalCommand &term);
|
||||||
|
static bool startTerminalEmulator(const QString &workingDir, const Utils::Environment &env);
|
||||||
static bool startTerminalEmulator(QSettings *settings, const QString &workingDir,
|
|
||||||
const Utils::Environment &env);
|
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void errorOccurred(QProcess::ProcessError error);
|
void errorOccurred(QProcess::ProcessError error);
|
||||||
|
|||||||
@@ -139,7 +139,7 @@ void FileUtils::openTerminal(const FilePath &path, const Environment &env)
|
|||||||
const QString pwd = QDir::toNativeSeparators(fileInfo.isDir() ?
|
const QString pwd = QDir::toNativeSeparators(fileInfo.isDir() ?
|
||||||
fileInfo.absoluteFilePath() :
|
fileInfo.absoluteFilePath() :
|
||||||
fileInfo.absolutePath());
|
fileInfo.absolutePath());
|
||||||
ConsoleProcess::startTerminalEmulator(ICore::settings(), pwd, env);
|
ConsoleProcess::startTerminalEmulator(pwd, env);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString FileUtils::msgFindInDirectory()
|
QString FileUtils::msgFindInDirectory()
|
||||||
|
|||||||
@@ -93,7 +93,7 @@ public:
|
|||||||
const QVector<TerminalCommand> availableTerminals = ConsoleProcess::availableTerminalEmulators();
|
const QVector<TerminalCommand> availableTerminals = ConsoleProcess::availableTerminalEmulators();
|
||||||
for (const TerminalCommand &term : availableTerminals)
|
for (const TerminalCommand &term : availableTerminals)
|
||||||
m_ui.terminalComboBox->addItem(term.command, QVariant::fromValue(term));
|
m_ui.terminalComboBox->addItem(term.command, QVariant::fromValue(term));
|
||||||
updateTerminalUi(ConsoleProcess::terminalEmulator(ICore::settings()));
|
updateTerminalUi(ConsoleProcess::terminalEmulator());
|
||||||
connect(m_ui.terminalComboBox,
|
connect(m_ui.terminalComboBox,
|
||||||
QOverload<int>::of(&QComboBox::currentIndexChanged),
|
QOverload<int>::of(&QComboBox::currentIndexChanged),
|
||||||
this,
|
this,
|
||||||
@@ -265,8 +265,7 @@ void SystemSettingsWidget::apply()
|
|||||||
QtcSettings *settings = ICore::settings();
|
QtcSettings *settings = ICore::settings();
|
||||||
EditorManager::setReloadSetting(IDocument::ReloadSetting(m_ui.reloadBehavior->currentIndex()));
|
EditorManager::setReloadSetting(IDocument::ReloadSetting(m_ui.reloadBehavior->currentIndex()));
|
||||||
if (HostOsInfo::isAnyUnixHost()) {
|
if (HostOsInfo::isAnyUnixHost()) {
|
||||||
ConsoleProcess::setTerminalEmulator(settings,
|
ConsoleProcess::setTerminalEmulator({m_ui.terminalComboBox->lineEdit()->text(),
|
||||||
{m_ui.terminalComboBox->lineEdit()->text(),
|
|
||||||
m_ui.terminalOpenArgs->text(),
|
m_ui.terminalOpenArgs->text(),
|
||||||
m_ui.terminalExecuteArgs->text()});
|
m_ui.terminalExecuteArgs->text()});
|
||||||
if (!HostOsInfo::isMacHost()) {
|
if (!HostOsInfo::isMacHost()) {
|
||||||
|
|||||||
@@ -209,13 +209,8 @@ void TerminalRunner::start()
|
|||||||
|
|
||||||
m_stubProc.setEnvironment(stub.environment);
|
m_stubProc.setEnvironment(stub.environment);
|
||||||
m_stubProc.setWorkingDirectory(stub.workingDirectory);
|
m_stubProc.setWorkingDirectory(stub.workingDirectory);
|
||||||
|
m_stubProc.setMode(HostOsInfo::isWindowsHost() ? ConsoleProcess::Suspend
|
||||||
if (HostOsInfo::isWindowsHost()) {
|
: ConsoleProcess::Debug);
|
||||||
m_stubProc.setMode(ConsoleProcess::Suspend);
|
|
||||||
} else {
|
|
||||||
m_stubProc.setMode(ConsoleProcess::Debug);
|
|
||||||
m_stubProc.setSettings(Core::ICore::settings());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Error message for user is delivered via a signal.
|
// Error message for user is delivered via a signal.
|
||||||
m_stubProc.setCommand(stub.command);
|
m_stubProc.setCommand(stub.command);
|
||||||
|
|||||||
@@ -147,8 +147,6 @@ ApplicationLauncherPrivate::ApplicationLauncherPrivate(ApplicationLauncher *pare
|
|||||||
connect(&m_guiProcess, &QtcProcess::errorOccurred,
|
connect(&m_guiProcess, &QtcProcess::errorOccurred,
|
||||||
q, &ApplicationLauncher::error);
|
q, &ApplicationLauncher::error);
|
||||||
|
|
||||||
m_consoleProcess.setSettings(Core::ICore::settings());
|
|
||||||
|
|
||||||
connect(&m_consoleProcess, &ConsoleProcess::started,
|
connect(&m_consoleProcess, &ConsoleProcess::started,
|
||||||
this, &ApplicationLauncherPrivate::handleProcessStarted);
|
this, &ApplicationLauncherPrivate::handleProcessStarted);
|
||||||
connect(&m_consoleProcess, &ConsoleProcess::errorOccurred,
|
connect(&m_consoleProcess, &ConsoleProcess::errorOccurred,
|
||||||
|
|||||||
@@ -200,7 +200,6 @@ void SshDeviceProcess::handleConnected()
|
|||||||
connect(&d->consoleProcess, &ConsoleProcess::finished,
|
connect(&d->consoleProcess, &ConsoleProcess::finished,
|
||||||
this, [this] { handleProcessFinished(d->consoleProcess.errorString()); });
|
this, [this] { handleProcessFinished(d->consoleProcess.errorString()); });
|
||||||
d->consoleProcess.setAbortOnMetaChars(false);
|
d->consoleProcess.setAbortOnMetaChars(false);
|
||||||
d->consoleProcess.setSettings(Core::ICore::settings());
|
|
||||||
d->consoleProcess.setCommand(d->process->fullLocalCommandLine());
|
d->consoleProcess.setCommand(d->process->fullLocalCommandLine());
|
||||||
d->consoleProcess.start();
|
d->consoleProcess.start();
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user