From 5ae8700e92032eaa58821b93194bf8546be10a01 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Thu, 18 Mar 2021 14:55:11 +0100 Subject: [PATCH] LanguageClient: Add copy button to annotation tooltip Change-Id: Ibe01543efa39e47de2b9d2d8e7302932bfcd413c Reviewed-by: Christian Stenger --- src/plugins/languageclient/diagnosticmanager.cpp | 16 +++++++++++++++- src/plugins/languageclient/diagnosticmanager.h | 1 + 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/plugins/languageclient/diagnosticmanager.cpp b/src/plugins/languageclient/diagnosticmanager.cpp index a24ea0458eb..bd5dcfdcbf5 100644 --- a/src/plugins/languageclient/diagnosticmanager.cpp +++ b/src/plugins/languageclient/diagnosticmanager.cpp @@ -34,6 +34,9 @@ #include #include +#include +#include +#include #include using namespace LanguageServerProtocol; @@ -122,8 +125,19 @@ void DiagnosticManager::showDiagnostics(const DocumentUri &uri) const VersionedDiagnostics &versionedDiagnostics = m_diagnostics.value(uri); const int docRevision = doc->document()->revision(); if (versionedDiagnostics.version.value_or(docRevision) == docRevision) { + const auto icon = QIcon::fromTheme("edit-copy", Utils::Icons::COPY.icon()); + const QString tooltip = tr("Copy to Clipboard"); for (const Diagnostic &diagnostic : versionedDiagnostics.diagnostics) { - doc->addMark(new TextMark(filePath, diagnostic, m_clientId)); + QAction *action = new QAction(); + action->setIcon(icon); + action->setToolTip(tooltip); + QObject::connect(action, &QAction::triggered, [text = diagnostic.message()]() { + QApplication::clipboard()->setText(text); + }); + auto mark = new TextMark(filePath, diagnostic, m_clientId); + mark->setActions({action}); + + doc->addMark(mark); extraSelections << toDiagnosticsSelections(diagnostic, doc->document()); } } diff --git a/src/plugins/languageclient/diagnosticmanager.h b/src/plugins/languageclient/diagnosticmanager.h index 3483c976f21..dcd292a17f0 100644 --- a/src/plugins/languageclient/diagnosticmanager.h +++ b/src/plugins/languageclient/diagnosticmanager.h @@ -37,6 +37,7 @@ namespace LanguageClient { class DiagnosticManager { + Q_DECLARE_TR_FUNCTIONS(LanguageClient::DiagnosticManager) public: explicit DiagnosticManager(const Utils::Id &clientId); ~DiagnosticManager();