File validate-initial-working-directory.patch of Package konsole.6876

From 6e2d3f4e7e952a342ed91bf93d4487bd51a331ea Mon Sep 17 00:00:00 2001
From: Kurt Hindenburg <kurt.hindenburg@gmail.com>
Date: Sat, 8 Oct 2016 16:32:01 -0400
Subject: 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
---
 src/Part.cpp    |  1 +
 src/Session.cpp | 17 ++++++++++++++++-
 src/Session.h   |  2 ++
 3 files changed, 19 insertions(+), 1 deletion(-)

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;
-- 
cgit v0.11.2

openSUSE Build Service is sponsored by