From 51bcb2ebd4da8ab4a42da7c423d894726dcb6aca Mon Sep 17 00:00:00 2001 From: Mariusz Glebocki Date: Tue, 22 Oct 2019 02:31:03 +0200 Subject: [PATCH] Reduce code duplication in session creating code --- src/MainWindow.cpp | 9 ++---- src/ViewManager.cpp | 69 +++++++++++++++------------------------------ src/ViewManager.h | 9 ++++++ 3 files changed, 33 insertions(+), 54 deletions(-) diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index dcdda8272..461b9e54b 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -492,13 +492,8 @@ Session *MainWindow::createSession(Profile::Ptr profile, const QString &director profile = ProfileManager::instance()->defaultProfile(); } - Session *session = SessionManager::instance()->createSession(profile); - - if (!directory.isEmpty() && profile->startInCurrentSessionDir()) { - session->setInitialWorkingDirectory(directory); - } - - session->addEnvironmentEntry(QStringLiteral("KONSOLE_DBUS_WINDOW=/Windows/%1").arg(_viewManager->managerId())); + const QString newSessionDirectory = profile->startInCurrentSessionDir() ? directory : QString(); + Session *session = _viewManager->createSession(profile, newSessionDirectory); // create view before starting the session process so that the session // doesn't suffer a change in terminal size right after the session diff --git a/src/ViewManager.cpp b/src/ViewManager.cpp index 028f300d6..2d3c76736 100644 --- a/src/ViewManager.cpp +++ b/src/ViewManager.cpp @@ -443,6 +443,17 @@ Session* ViewManager::forgetTerminal(TerminalDisplay* terminal) return session; } +Session* ViewManager::createSession(const Profile::Ptr &profile, const QString &directory) +{ + Session *session = SessionManager::instance()->createSession(profile); + Q_ASSERT(session); + if (!directory.isEmpty()) { + session->setInitialWorkingDirectory(directory); + } + session->addEnvironmentEntry(QStringLiteral("KONSOLE_DBUS_WINDOW=/Windows/%1").arg(managerId())); + return session; +} + void ViewManager::sessionFinished() { // if this slot is called after the view manager's main widget @@ -534,7 +545,6 @@ void ViewManager::splitTopBottom() void ViewManager::splitView(Qt::Orientation orientation) { - // get the currently applied profile and use it to create the new tab. int currentSessionId = currentSession(); // At least one display/session exists if we are splitting Q_ASSERT(currentSessionId >= 0); @@ -544,17 +554,10 @@ void ViewManager::splitView(Qt::Orientation orientation) auto profile = SessionManager::instance()->sessionProfile(activeSession); - // Create a new session with the selected profile. - auto *session = SessionManager::instance()->createSession(profile); - const QString directory = profile->startInCurrentSessionDir() ? activeSession->currentWorkingDirectory() : QString(); - if (!directory.isEmpty() && profile->startInCurrentSessionDir()) { - session->setInitialWorkingDirectory(directory); - } - - session->addEnvironmentEntry(QStringLiteral("KONSOLE_DBUS_WINDOW=/Windows/%1").arg(managerId())); + auto *session = createSession(profile, directory); auto terminalDisplay = createView(session); @@ -1036,57 +1039,29 @@ void ViewManager::setCurrentSession(int sessionId) int ViewManager::newSession() { - Profile::Ptr profile = ProfileManager::instance()->defaultProfile(); - Session *session = SessionManager::instance()->createSession(profile); - - session->addEnvironmentEntry(QStringLiteral("KONSOLE_DBUS_WINDOW=/Windows/%1").arg(managerId())); - - auto newView = createView(session); - activeContainer()->addView(newView); - session->run(); - - return session->sessionId(); + return newSession(QString(), QString()); } int ViewManager::newSession(const QString &profile) { - const QList profilelist = ProfileManager::instance()->allProfiles(); - Profile::Ptr profileptr = ProfileManager::instance()->defaultProfile(); - - for (const auto &i : profilelist) { - if (i->name() == profile) { - profileptr = i; - break; - } - } - - Session *session = SessionManager::instance()->createSession(profileptr); - - session->addEnvironmentEntry(QStringLiteral("KONSOLE_DBUS_WINDOW=/Windows/%1").arg(managerId())); - - auto newView = createView(session); - activeContainer()->addView(newView); - session->run(); - - return session->sessionId(); + return newSession(profile, QString()); } int ViewManager::newSession(const QString &profile, const QString &directory) { - const QList profilelist = ProfileManager::instance()->allProfiles(); Profile::Ptr profileptr = ProfileManager::instance()->defaultProfile(); + if(!profile.isEmpty()) { + const QList profilelist = ProfileManager::instance()->allProfiles(); - for (const auto &i : profilelist) { - if (i->name() == profile) { - profileptr = i; - break; + for (const auto &i : profilelist) { + if (i->name() == profile) { + profileptr = i; + break; + } } } - Session *session = SessionManager::instance()->createSession(profileptr); - session->setInitialWorkingDirectory(directory); - - session->addEnvironmentEntry(QStringLiteral("KONSOLE_DBUS_WINDOW=/Windows/%1").arg(managerId())); + Session *session = createSession(profileptr, directory); auto newView = createView(session); activeContainer()->addView(newView); diff --git a/src/ViewManager.h b/src/ViewManager.h index 399d13a6f..cded6a385 100644 --- a/src/ViewManager.h +++ b/src/ViewManager.h @@ -196,6 +196,15 @@ public: QHash forgetAll(ViewSplitter* splitter); Session* forgetTerminal(TerminalDisplay* terminal); + + /** + * Creates and returns new session + * + * The session has specified @p profile, working @p directory + * and configured environment. + */ + Session* createSession(const Profile::Ptr &profile, const QString &directory = QString()); + Q_SIGNALS: /** Emitted when the last view is removed from the view manager */ void empty();