diff --git a/src/app/main.cpp b/src/app/main.cpp index b078786eb68..381ab9229ff 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -33,6 +33,7 @@ #include #include +#include #include #include #include @@ -551,6 +552,7 @@ int main(int argc, char **argv) QSettings::SystemScope, QLatin1String(Core::Constants::IDE_SETTINGSVARIANT_STR), QLatin1String(Core::Constants::IDE_CASED_ID)); + Utils::ConsoleProcess::setSettings(settings); loadFonts(); if (Utils::HostOsInfo::isWindowsHost() diff --git a/src/libs/utils/consoleprocess.cpp b/src/libs/utils/consoleprocess.cpp index e3107add894..a21af468d30 100644 --- a/src/libs/utils/consoleprocess.cpp +++ b/src/libs/utils/consoleprocess.cpp @@ -118,6 +118,8 @@ static QString msgCannotExecute(const QString & p, const QString &why) return ConsoleProcess::tr("Cannot execute \"%1\": %2").arg(p, why); } +static QSettings *s_settings = nullptr; + // TerminalCommand TerminalCommand::TerminalCommand(const QString &command, const QString &openArgs, const QString &executeArgs, bool needsQuotes) @@ -149,7 +151,6 @@ public: QString m_errorString; bool m_abortOnMetaChars = true; bool m_runAsRoot = false; - QSettings *m_settings = nullptr; // Used on Unix only QtcProcess m_process; @@ -197,7 +198,7 @@ const CommandLine &ConsoleProcess::commandLine() const void ConsoleProcess::setSettings(QSettings *settings) { - d->m_settings = settings; + s_settings = settings; } Q_GLOBAL_STATIC_WITH_ARGS(const QVector, knownTerminals, ( @@ -271,17 +272,17 @@ const char kTerminalCommandKey[] = "General/Terminal/Command"; const char kTerminalOpenOptionsKey[] = "General/Terminal/OpenOptions"; const char kTerminalExecuteOptionsKey[] = "General/Terminal/ExecuteOptions"; -TerminalCommand ConsoleProcess::terminalEmulator(const QSettings *settings) +TerminalCommand ConsoleProcess::terminalEmulator() { - if (settings && HostOsInfo::isAnyUnixHost()) { - if (settings->value(kTerminalVersionKey).toString() == kTerminalVersion) { - if (settings->contains(kTerminalCommandKey)) - return {settings->value(kTerminalCommandKey).toString(), - settings->value(kTerminalOpenOptionsKey).toString(), - settings->value(kTerminalExecuteOptionsKey).toString()}; + if (s_settings && HostOsInfo::isAnyUnixHost()) { + if (s_settings->value(kTerminalVersionKey).toString() == kTerminalVersion) { + if (s_settings->contains(kTerminalCommandKey)) + return {s_settings->value(kTerminalCommandKey).toString(), + s_settings->value(kTerminalOpenOptionsKey).toString(), + s_settings->value(kTerminalExecuteOptionsKey).toString()}; } else { // 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()) { // split off command and options const QStringList splitCommand = ProcessArgs::splitArgs(value); @@ -299,18 +300,18 @@ TerminalCommand ConsoleProcess::terminalEmulator(const QSettings *settings) return defaultTerminalEmulator(); } -void ConsoleProcess::setTerminalEmulator(QSettings *settings, const TerminalCommand &term) +void ConsoleProcess::setTerminalEmulator(const TerminalCommand &term) { - if (HostOsInfo::isAnyUnixHost()) { - settings->setValue(kTerminalVersionKey, kTerminalVersion); + if (s_settings && HostOsInfo::isAnyUnixHost()) { + s_settings->setValue(kTerminalVersionKey, kTerminalVersion); if (term == defaultTerminalEmulator()) { - settings->remove(kTerminalCommandKey); - settings->remove(kTerminalOpenOptionsKey); - settings->remove(kTerminalExecuteOptionsKey); + s_settings->remove(kTerminalCommandKey); + s_settings->remove(kTerminalOpenOptionsKey); + s_settings->remove(kTerminalExecuteOptionsKey); } else { - settings->setValue(kTerminalCommandKey, term.command); - settings->setValue(kTerminalOpenOptionsKey, term.openArgs); - settings->setValue(kTerminalExecuteOptionsKey, term.executeArgs); + s_settings->setValue(kTerminalCommandKey, term.command); + s_settings->setValue(kTerminalOpenOptionsKey, term.openArgs); + 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, - const Environment &env) +bool ConsoleProcess::startTerminalEmulator(const QString &workingDir, const Environment &env) { #ifdef Q_OS_WIN - Q_UNUSED(settings) - STARTUPINFO si; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); @@ -407,7 +405,7 @@ bool ConsoleProcess::startTerminalEmulator(QSettings *settings, const QString &w return success; #else - const TerminalCommand term = terminalEmulator(settings); + const TerminalCommand term = terminalEmulator(); QProcess process; process.setProgram(term.command); process.setArguments(ProcessArgs::splitArgs(term.openArgs)); @@ -569,7 +567,7 @@ void ConsoleProcess::start() } ProcessArgs::SplitError qerr; - const TerminalCommand terminal = terminalEmulator(d->m_settings); + const TerminalCommand terminal = terminalEmulator(); const ProcessArgs terminalArgs = ProcessArgs::prepareArgs(terminal.executeArgs, &qerr, HostOsInfo::hostOs(), diff --git a/src/libs/utils/consoleprocess.h b/src/libs/utils/consoleprocess.h index 01ee1f2b291..c5427d68444 100644 --- a/src/libs/utils/consoleprocess.h +++ b/src/libs/utils/consoleprocess.h @@ -99,15 +99,12 @@ public: int exitCode() const; QProcess::ExitStatus exitStatus() const; - void setSettings(QSettings *); - + static void setSettings(QSettings *settings); static TerminalCommand defaultTerminalEmulator(); static QVector availableTerminalEmulators(); - static TerminalCommand terminalEmulator(const QSettings *settings); - static void setTerminalEmulator(QSettings *settings, const TerminalCommand &term); - - static bool startTerminalEmulator(QSettings *settings, const QString &workingDir, - const Utils::Environment &env); + static TerminalCommand terminalEmulator(); + static void setTerminalEmulator(const TerminalCommand &term); + static bool startTerminalEmulator(const QString &workingDir, const Utils::Environment &env); signals: void errorOccurred(QProcess::ProcessError error); diff --git a/src/plugins/coreplugin/fileutils.cpp b/src/plugins/coreplugin/fileutils.cpp index a17923deca6..3f54d49d278 100644 --- a/src/plugins/coreplugin/fileutils.cpp +++ b/src/plugins/coreplugin/fileutils.cpp @@ -139,7 +139,7 @@ void FileUtils::openTerminal(const FilePath &path, const Environment &env) const QString pwd = QDir::toNativeSeparators(fileInfo.isDir() ? fileInfo.absoluteFilePath() : fileInfo.absolutePath()); - ConsoleProcess::startTerminalEmulator(ICore::settings(), pwd, env); + ConsoleProcess::startTerminalEmulator(pwd, env); } QString FileUtils::msgFindInDirectory() diff --git a/src/plugins/coreplugin/systemsettings.cpp b/src/plugins/coreplugin/systemsettings.cpp index 8ec4945082f..17b10b5c5c1 100644 --- a/src/plugins/coreplugin/systemsettings.cpp +++ b/src/plugins/coreplugin/systemsettings.cpp @@ -93,7 +93,7 @@ public: const QVector availableTerminals = ConsoleProcess::availableTerminalEmulators(); for (const TerminalCommand &term : availableTerminals) m_ui.terminalComboBox->addItem(term.command, QVariant::fromValue(term)); - updateTerminalUi(ConsoleProcess::terminalEmulator(ICore::settings())); + updateTerminalUi(ConsoleProcess::terminalEmulator()); connect(m_ui.terminalComboBox, QOverload::of(&QComboBox::currentIndexChanged), this, @@ -265,8 +265,7 @@ void SystemSettingsWidget::apply() QtcSettings *settings = ICore::settings(); EditorManager::setReloadSetting(IDocument::ReloadSetting(m_ui.reloadBehavior->currentIndex())); if (HostOsInfo::isAnyUnixHost()) { - ConsoleProcess::setTerminalEmulator(settings, - {m_ui.terminalComboBox->lineEdit()->text(), + ConsoleProcess::setTerminalEmulator({m_ui.terminalComboBox->lineEdit()->text(), m_ui.terminalOpenArgs->text(), m_ui.terminalExecuteArgs->text()}); if (!HostOsInfo::isMacHost()) { diff --git a/src/plugins/debugger/terminal.cpp b/src/plugins/debugger/terminal.cpp index 027a1138626..3cd56dbe62d 100644 --- a/src/plugins/debugger/terminal.cpp +++ b/src/plugins/debugger/terminal.cpp @@ -209,13 +209,8 @@ void TerminalRunner::start() m_stubProc.setEnvironment(stub.environment); m_stubProc.setWorkingDirectory(stub.workingDirectory); - - if (HostOsInfo::isWindowsHost()) { - m_stubProc.setMode(ConsoleProcess::Suspend); - } else { - m_stubProc.setMode(ConsoleProcess::Debug); - m_stubProc.setSettings(Core::ICore::settings()); - } + m_stubProc.setMode(HostOsInfo::isWindowsHost() ? ConsoleProcess::Suspend + : ConsoleProcess::Debug); // Error message for user is delivered via a signal. m_stubProc.setCommand(stub.command); diff --git a/src/plugins/projectexplorer/applicationlauncher.cpp b/src/plugins/projectexplorer/applicationlauncher.cpp index 98fc65d4b1a..b2adab2ad07 100644 --- a/src/plugins/projectexplorer/applicationlauncher.cpp +++ b/src/plugins/projectexplorer/applicationlauncher.cpp @@ -147,8 +147,6 @@ ApplicationLauncherPrivate::ApplicationLauncherPrivate(ApplicationLauncher *pare connect(&m_guiProcess, &QtcProcess::errorOccurred, q, &ApplicationLauncher::error); - m_consoleProcess.setSettings(Core::ICore::settings()); - connect(&m_consoleProcess, &ConsoleProcess::started, this, &ApplicationLauncherPrivate::handleProcessStarted); connect(&m_consoleProcess, &ConsoleProcess::errorOccurred, diff --git a/src/plugins/projectexplorer/devicesupport/sshdeviceprocess.cpp b/src/plugins/projectexplorer/devicesupport/sshdeviceprocess.cpp index d22855afc9a..74a761be477 100644 --- a/src/plugins/projectexplorer/devicesupport/sshdeviceprocess.cpp +++ b/src/plugins/projectexplorer/devicesupport/sshdeviceprocess.cpp @@ -200,7 +200,6 @@ void SshDeviceProcess::handleConnected() connect(&d->consoleProcess, &ConsoleProcess::finished, this, [this] { handleProcessFinished(d->consoleProcess.errorString()); }); d->consoleProcess.setAbortOnMetaChars(false); - d->consoleProcess.setSettings(Core::ICore::settings()); d->consoleProcess.setCommand(d->process->fullLocalCommandLine()); d->consoleProcess.start(); } else {