You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
qterminal-packaging/src/terminalconfig.cpp

106 lines
2.5 KiB

#include <QHash>
#include <QString>
#include "qterminalapp.h"
#include "terminalconfig.h"
#include "properties.h"
#include "termwidget.h"
TerminalConfig::TerminalConfig(const QString & wdir, const QString & shell)
{
m_workingDirectory = wdir;
m_shell = shell;
}
TerminalConfig::TerminalConfig()
{
}
TerminalConfig::TerminalConfig(const TerminalConfig &cfg)
: m_currentDirectory(cfg.m_currentDirectory),
m_workingDirectory(cfg.m_workingDirectory),
m_shell(cfg.m_shell) {}
QString TerminalConfig::getWorkingDirectory()
{
if (!m_workingDirectory.isEmpty())
return m_workingDirectory;
if (Properties::Instance()->useCWD && !m_currentDirectory.isEmpty())
return m_currentDirectory;
return QTerminalApp::Instance()->getWorkingDirectory();
}
QString TerminalConfig::getShell()
{
if (!m_shell.isEmpty())
return m_shell;
if (!Properties::Instance()->shell.isEmpty())
return Properties::Instance()->shell;
QByteArray envShell = qgetenv("SHELL");
if (envShell.constData() != NULL)
{
QString shellString = QString(envShell);
if (!shellString.isEmpty())
return shellString;
}
return QString();
}
void TerminalConfig::setWorkingDirectory(const QString &val)
{
m_workingDirectory = val;
}
void TerminalConfig::setShell(const QString &val)
{
m_shell = val;
}
void TerminalConfig::provideCurrentDirectory(const QString &val)
{
m_currentDirectory = val;
}
#if HAVE_QDBUS
#define DBUS_ARG_WORKDIR "workingDirectory"
#define DBUS_ARG_SHELL "shell"
TerminalConfig TerminalConfig::fromDbus(const QHash<QString,QVariant> &termArgsConst, TermWidget *toSplit)
{
QHash<QString,QVariant> termArgs(termArgsConst);
if (toSplit != NULL && !termArgs.contains(DBUS_ARG_WORKDIR))
{
termArgs[DBUS_ARG_WORKDIR] = QVariant(toSplit->impl()->workingDirectory());
}
return TerminalConfig::fromDbus(termArgs);
}
static QString variantToString(QVariant variant, QString &defaultVal)
{
if (variant.type() == QVariant::String)
return qvariant_cast<QString>(variant);
return defaultVal;
}
TerminalConfig TerminalConfig::fromDbus(const QHash<QString,QVariant> &termArgs)
{
QString wdir("");
QString shell(Properties::Instance()->shell);
if (termArgs.contains(DBUS_ARG_WORKDIR))
{
wdir = variantToString(termArgs[DBUS_ARG_WORKDIR], wdir);
}
if (termArgs.contains(DBUS_ARG_SHELL)) {
shell = variantToString(termArgs[DBUS_ARG_SHELL], shell);
}
return TerminalConfig(wdir, shell);
}
#endif