diff options
author | Marcus Tillmanns <marcus.tillmanns@qt.io> | 2023-02-23 12:47:39 +0100 |
---|---|---|
committer | Marcus Tillmanns <marcus.tillmanns@qt.io> | 2023-02-24 10:19:33 +0000 |
commit | 682ef157d8561cb9648be8efcf45bdc8d0e47ea7 (patch) | |
tree | 43b46db310635710df45113b443e2d89deeedbb3 /src/plugins/projectexplorer/projectexplorer.cpp | |
parent | d5a9e28a968d13f9c437033d647b5da8eaf09dc9 (diff) | |
download | qt-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.cpp | 29 |
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() |