forked from qt-creator/qt-creator
Terminal: Add enable setting
Change-Id: I13cca8b2d4c55df7db29807c1252718e2819ea0b Reviewed-by: Cristian Adam <cristian.adam@qt.io>
This commit is contained in:
@@ -8,6 +8,7 @@
|
||||
#include "terminalcommand.h"
|
||||
#include "terminalinterface.h"
|
||||
|
||||
#include <QMutex>
|
||||
#include <QTemporaryFile>
|
||||
|
||||
namespace Utils::Terminal {
|
||||
@@ -88,21 +89,65 @@ public:
|
||||
ExternalTerminalProcessImpl() { setStubCreator(new ProcessStubCreator(this)); }
|
||||
};
|
||||
|
||||
struct HooksPrivate
|
||||
class HooksPrivate
|
||||
{
|
||||
public:
|
||||
HooksPrivate()
|
||||
: m_openTerminalHook([](const OpenTerminalParameters ¶meters) {
|
||||
: m_getTerminalCommandsForDevicesHook([] { return QList<NameAndCommandLine>{}; })
|
||||
{
|
||||
auto openTerminal = [](const OpenTerminalParameters ¶meters) {
|
||||
DeviceFileHooks::instance().openTerminal(parameters.workingDirectory.value_or(
|
||||
FilePath{}),
|
||||
parameters.environment.value_or(Environment{}));
|
||||
})
|
||||
, m_createTerminalProcessInterfaceHook([] { return new ExternalTerminalProcessImpl(); })
|
||||
, m_getTerminalCommandsForDevicesHook([] { return QList<NameAndCommandLine>{}; })
|
||||
{}
|
||||
};
|
||||
auto createProcessInterface = []() { return new ExternalTerminalProcessImpl(); };
|
||||
|
||||
addCallbackSet("External", {openTerminal, createProcessInterface});
|
||||
}
|
||||
|
||||
void addCallbackSet(const QString &name, const Hooks::CallbackSet &callbackSet)
|
||||
{
|
||||
QMutexLocker lk(&m_mutex);
|
||||
m_callbackSets.push_back(qMakePair(name, callbackSet));
|
||||
|
||||
m_createTerminalProcessInterface
|
||||
= m_callbackSets.back().second.createTerminalProcessInterface;
|
||||
m_openTerminal = m_callbackSets.back().second.openTerminal;
|
||||
}
|
||||
|
||||
void removeCallbackSet(const QString &name)
|
||||
{
|
||||
if (name == "External")
|
||||
return;
|
||||
|
||||
QMutexLocker lk(&m_mutex);
|
||||
m_callbackSets.removeIf([name](const auto &pair) { return pair.first == name; });
|
||||
|
||||
m_createTerminalProcessInterface
|
||||
= m_callbackSets.back().second.createTerminalProcessInterface;
|
||||
m_openTerminal = m_callbackSets.back().second.openTerminal;
|
||||
}
|
||||
|
||||
Hooks::CreateTerminalProcessInterface createTerminalProcessInterface()
|
||||
{
|
||||
QMutexLocker lk(&m_mutex);
|
||||
return m_createTerminalProcessInterface;
|
||||
}
|
||||
|
||||
Hooks::OpenTerminal openTerminal()
|
||||
{
|
||||
QMutexLocker lk(&m_mutex);
|
||||
return m_openTerminal;
|
||||
}
|
||||
|
||||
Hooks::OpenTerminalHook m_openTerminalHook;
|
||||
Hooks::CreateTerminalProcessInterfaceHook m_createTerminalProcessInterfaceHook;
|
||||
Hooks::GetTerminalCommandsForDevicesHook m_getTerminalCommandsForDevicesHook;
|
||||
|
||||
private:
|
||||
Hooks::OpenTerminal m_openTerminal;
|
||||
Hooks::CreateTerminalProcessInterface m_createTerminalProcessInterface;
|
||||
|
||||
QMutex m_mutex;
|
||||
QList<QPair<QString, Hooks::CallbackSet>> m_callbackSets;
|
||||
};
|
||||
|
||||
Hooks &Hooks::instance()
|
||||
@@ -117,14 +162,14 @@ Hooks::Hooks()
|
||||
|
||||
Hooks::~Hooks() = default;
|
||||
|
||||
Hooks::OpenTerminalHook &Hooks::openTerminalHook()
|
||||
void Hooks::openTerminal(const OpenTerminalParameters ¶meters) const
|
||||
{
|
||||
return d->m_openTerminalHook;
|
||||
d->openTerminal()(parameters);
|
||||
}
|
||||
|
||||
Hooks::CreateTerminalProcessInterfaceHook &Hooks::createTerminalProcessInterfaceHook()
|
||||
ProcessInterface *Hooks::createTerminalProcessInterface() const
|
||||
{
|
||||
return d->m_createTerminalProcessInterfaceHook;
|
||||
return d->createTerminalProcessInterface()();
|
||||
}
|
||||
|
||||
Hooks::GetTerminalCommandsForDevicesHook &Hooks::getTerminalCommandsForDevicesHook()
|
||||
@@ -132,4 +177,14 @@ Hooks::GetTerminalCommandsForDevicesHook &Hooks::getTerminalCommandsForDevicesHo
|
||||
return d->m_getTerminalCommandsForDevicesHook;
|
||||
}
|
||||
|
||||
void Hooks::addCallbackSet(const QString &name, const CallbackSet &callbackSet)
|
||||
{
|
||||
d->addCallbackSet(name, callbackSet);
|
||||
}
|
||||
|
||||
void Hooks::removeCallbackSet(const QString &name)
|
||||
{
|
||||
d->removeCallbackSet(name);
|
||||
}
|
||||
|
||||
} // namespace Utils::Terminal
|
||||
|
||||
Reference in New Issue
Block a user