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:
Jarek Kobus
2022-01-21 11:28:50 +01:00
parent b3375cfd56
commit 74f522e0de
8 changed files with 34 additions and 46 deletions

View File

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

View File

@@ -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(),

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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