From 66094398fb1e05a4581784eaf3d367e96b73a013 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Mon, 6 Mar 2023 11:54:21 +0100 Subject: [PATCH] Terminal: New Terminal opens project folder Change-Id: I974a3c73363a810a18f9327d8682c2a56a42fee2 Reviewed-by: Cristian Adam Reviewed-by: --- src/plugins/terminal/CMakeLists.txt | 2 +- src/plugins/terminal/terminalpane.cpp | 25 ++++++++++++++++++++++++- src/plugins/terminal/terminalpane.h | 2 +- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/plugins/terminal/CMakeLists.txt b/src/plugins/terminal/CMakeLists.txt index e12e518bd88..c0972eccf36 100644 --- a/src/plugins/terminal/CMakeLists.txt +++ b/src/plugins/terminal/CMakeLists.txt @@ -1,6 +1,6 @@ add_qtc_plugin(Terminal - PLUGIN_DEPENDS Core + PLUGIN_DEPENDS Core ProjectExplorer DEPENDS libvterm SOURCES celliterator.cpp celliterator.h diff --git a/src/plugins/terminal/terminalpane.cpp b/src/plugins/terminal/terminalpane.cpp index b93bdd3a5e9..c70cb412e3c 100644 --- a/src/plugins/terminal/terminalpane.cpp +++ b/src/plugins/terminal/terminalpane.cpp @@ -10,6 +10,9 @@ #include #include +#include +#include + #include #include #include @@ -88,9 +91,29 @@ TerminalPane::TerminalPane(QObject *parent) }); } -void TerminalPane::openTerminal(const Utils::Terminal::OpenTerminalParameters ¶meters) +static std::optional startupProjectDirectory() +{ + ProjectExplorer::Project *project = ProjectExplorer::ProjectManager::startupProject(); + if (!project) + return std::nullopt; + + return project->projectDirectory(); +} + +void TerminalPane::openTerminal(Utils::Terminal::OpenTerminalParameters parameters) { showPage(0); + + if (!parameters.workingDirectory) { + const std::optional projectDir = startupProjectDirectory(); + if (projectDir) { + if (!parameters.shellCommand + || parameters.shellCommand->executable().ensureReachable(*projectDir)) { + parameters.workingDirectory = *projectDir; + } + } + } + auto terminalWidget = new TerminalWidget(m_tabWidget, parameters); m_tabWidget->setCurrentIndex(m_tabWidget->addTab(terminalWidget, Tr::tr("Terminal"))); setupTerminalWidget(terminalWidget); diff --git a/src/plugins/terminal/terminalpane.h b/src/plugins/terminal/terminalpane.h index f748c70e717..1761e1b556a 100644 --- a/src/plugins/terminal/terminalpane.h +++ b/src/plugins/terminal/terminalpane.h @@ -36,7 +36,7 @@ public: virtual void goToNext(); virtual void goToPrev(); - void openTerminal(const Utils::Terminal::OpenTerminalParameters ¶meters); + void openTerminal(Utils::Terminal::OpenTerminalParameters parameters); void addTerminal(TerminalWidget *terminal, const QString &title); private: