summaryrefslogtreecommitdiff
path: root/src/plugins/projectexplorer/projectexplorer.cpp
diff options
context:
space:
mode:
authorMarcus Tillmanns <marcus.tillmanns@qt.io>2023-02-23 12:47:39 +0100
committerMarcus Tillmanns <marcus.tillmanns@qt.io>2023-02-24 10:19:33 +0000
commit682ef157d8561cb9648be8efcf45bdc8d0e47ea7 (patch)
tree43b46db310635710df45113b443e2d89deeedbb3 /src/plugins/projectexplorer/projectexplorer.cpp
parentd5a9e28a968d13f9c437033d647b5da8eaf09dc9 (diff)
downloadqt-creator-682ef157d8561cb9648be8efcf45bdc8d0e47ea7.tar.gz
Terminal: Add Terminal plugin
Adds a new Terminal plugin that provides a Terminal pane inside Qt Creator. Fixes: QTCREATORBUG-8511 Change-Id: I7eacb3efa2463d7df9f383ae3fc33254fb9019a9 Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: hjk <hjk@qt.io>
Diffstat (limited to 'src/plugins/projectexplorer/projectexplorer.cpp')
-rw-r--r--src/plugins/projectexplorer/projectexplorer.cpp29
1 files changed, 27 insertions, 2 deletions
diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index d2fee3f2bd..86f9330714 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -127,6 +127,7 @@
#include <utils/qtcassert.h>
#include <utils/removefiledialog.h>
#include <utils/stringutils.h>
+#include <utils/terminalhooks.h>
#include <utils/tooltip/tooltip.h>
#include <utils/utilsicons.h>
@@ -3794,6 +3795,13 @@ void ProjectExplorerPluginPrivate::showInFileSystemPane()
Core::FileUtils::showInFileSystemView(currentNode->filePath());
}
+static BuildConfiguration *activeBuildConfiguration(Project *project)
+{
+ if (!project || !project->activeTarget() || !project->activeTarget()->activeBuildConfiguration())
+ return {};
+ return project->activeTarget()->activeBuildConfiguration();
+}
+
void ProjectExplorerPluginPrivate::openTerminalHere(const EnvironmentGetter &env)
{
const Node *currentNode = ProjectTree::currentNode();
@@ -3803,7 +3811,21 @@ void ProjectExplorerPluginPrivate::openTerminalHere(const EnvironmentGetter &env
if (!environment)
return;
- Core::FileUtils::openTerminal(currentNode->directory(), environment.value());
+ BuildConfiguration *bc = activeBuildConfiguration(ProjectTree::projectForNode(currentNode));
+ if (!bc)
+ Terminal::Hooks::instance().openTerminalHook()({{}, currentNode->directory(), environment});
+
+ IDeviceConstPtr buildDevice = BuildDeviceKitAspect::device(bc->target()->kit());
+
+ if (!buildDevice)
+ return;
+
+ FilePath workingDir = currentNode->directory();
+ if (!buildDevice->ensureReachable(workingDir))
+ workingDir.clear();
+
+ const auto cmd = buildDevice->terminalCommand(workingDir, *environment);
+ Terminal::Hooks::instance().openTerminalHook()({cmd, workingDir, environment});
}
void ProjectExplorerPluginPrivate::openTerminalHereWithRunEnv()
@@ -3824,9 +3846,12 @@ void ProjectExplorerPluginPrivate::openTerminalHereWithRunEnv()
if (!device)
device = DeviceKitAspect::device(target->kit());
QTC_ASSERT(device && device->canOpenTerminal(), return);
+
const FilePath workingDir = device->type() == Constants::DESKTOP_DEVICE_TYPE
? currentNode->directory() : runnable.workingDirectory;
- device->openTerminal(runnable.environment, workingDir);
+
+ const auto cmd = device->terminalCommand(workingDir, runnable.environment);
+ Terminal::Hooks::instance().openTerminalHook()({cmd, workingDir, runnable.environment});
}
void ProjectExplorerPluginPrivate::removeFile()