summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKurt Hindenburg <kurt.hindenburg@gmail.com>2016-10-08 20:32:01 (GMT)
committerKurt Hindenburg <kurt.hindenburg@gmail.com>2016-10-08 20:32:01 (GMT)
commit6e2d3f4e7e952a342ed91bf93d4487bd51a331ea (patch)
tree735f53deef13b4bb238669b700df067dd7937d0e
parent1b8c9ca40ac7aff0d37eb3c26ade41c74d44a5c9 (diff)
Validate initial working directory Profile entry
Verify the Profile's initial working directory exists and is a dir This applies to KonsolePart as well as Konsole
-rw-r--r--src/Part.cpp1
-rw-r--r--src/Session.cpp17
-rw-r--r--src/Session.h2
3 files changed, 19 insertions, 1 deletions
diff --git a/src/Part.cpp b/src/Part.cpp
index 07f8cf7..7968176 100644
--- a/src/Part.cpp
+++ b/src/Part.cpp
@@ -139,6 +139,7 @@ void Part::showShellInDir(const QString& dir)
if (activeSession()->isRunning())
return;
+ // All other checking is done in setInitialWorkingDirectory()
if (!dir.isEmpty())
activeSession()->setInitialWorkingDirectory(dir);
diff --git a/src/Session.cpp b/src/Session.cpp
index 68f0ffc..302bddc 100644
--- a/src/Session.cpp
+++ b/src/Session.cpp
@@ -264,7 +264,7 @@ void Session::setArguments(const QStringList& arguments)
void Session::setInitialWorkingDirectory(const QString& dir)
{
- _initialWorkingDir = KShell::tildeExpand(ShellCommand::expand(dir));
+ _initialWorkingDir = validDirectory(KShell::tildeExpand(ShellCommand::expand(dir)));
}
QString Session::currentWorkingDirectory()
@@ -1550,6 +1550,21 @@ void Session::restoreSession(KConfigGroup& group)
if (!value.isEmpty()) setCodec(value.toUtf8());
}
+QString Session::validDirectory(const QString& dir) const
+{
+ QString validDir = dir;
+ if (validDir.isEmpty()) {
+ validDir = QDir::currentPath();
+ }
+
+ const QFileInfo fi(validDir);
+ if (!fi.exists() || !fi.isDir()) {
+ validDir = QDir::homePath();
+ }
+
+ return validDir;
+}
+
SessionGroup::SessionGroup(QObject* parent)
: QObject(parent), _masterMode(0)
{
diff --git a/src/Session.h b/src/Session.h
index 397b515..30248b3 100644
--- a/src/Session.h
+++ b/src/Session.h
@@ -730,6 +730,8 @@ private:
bool updateForegroundProcessInfo();
void updateWorkingDirectory();
+ QString validDirectory(const QString& directory) const;
+
QUuid _uniqueIdentifier; // SHELL_SESSION_ID
Pty* _shellProcess;