From fdd3262cabc9d917e6c866c45a11686053904179 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Mon, 28 Oct 2019 09:00:46 +0100 Subject: [PATCH] ClangTools: Fix state of the "Apply Fixits" button * Disable the button when (re-)running an analysis. * Ensure the button stays disabled when a file is saved. Change-Id: I1140dd3938de554ea83d33c5bb490be3468d7db0 Reviewed-by: Cristian Adam Reviewed-by: Nikolai Kosjar --- src/plugins/clangtools/clangtool.cpp | 5 +++-- src/plugins/clangtools/clangtoolsdiagnosticmodel.cpp | 6 +++--- src/plugins/clangtools/clangtoolsdiagnosticmodel.h | 5 +++-- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/plugins/clangtools/clangtool.cpp b/src/plugins/clangtools/clangtool.cpp index 6b645ad9520..607b78680cd 100644 --- a/src/plugins/clangtools/clangtool.cpp +++ b/src/plugins/clangtools/clangtool.cpp @@ -495,12 +495,13 @@ void ClangTool::startTool(ClangTool::FileSelection fileSelection, }); m_perspective.select(); - m_diagnosticModel->clear(); - setToolBusy(true); m_diagnosticFilterModel->setProject(project); + m_applyFixitsButton->setEnabled(false); m_running = true; + + setToolBusy(true); handleStateUpdate(); updateRunActions(); diff --git a/src/plugins/clangtools/clangtoolsdiagnosticmodel.cpp b/src/plugins/clangtools/clangtoolsdiagnosticmodel.cpp index 6ac802d9734..6608bb3ea4e 100644 --- a/src/plugins/clangtools/clangtoolsdiagnosticmodel.cpp +++ b/src/plugins/clangtools/clangtoolsdiagnosticmodel.cpp @@ -101,10 +101,10 @@ QDebug operator<<(QDebug debug, const Diagnostic &d) void ClangToolsDiagnosticModel::addDiagnostics(const Diagnostics &diagnostics) { - const auto onFixitStatusChanged = [this](FixitStatus newStatus) { + const auto onFixitStatusChanged = [this](FixitStatus oldStatus, FixitStatus newStatus) { if (newStatus == FixitStatus::Scheduled) ++m_fixItsToApplyCount; - else + else if (oldStatus == FixitStatus::Scheduled) --m_fixItsToApplyCount; emit fixItsToApplyCountChanged(m_fixItsToApplyCount); }; @@ -463,7 +463,7 @@ void DiagnosticItem::setFixItStatus(const FixitStatus &status) m_fixitStatus = status; update(); if (m_onFixitStatusChanged && status != oldStatus) - m_onFixitStatusChanged(status); + m_onFixitStatusChanged(oldStatus, status); } void DiagnosticItem::setFixitOperations(const ReplacementOperations &replacements) diff --git a/src/plugins/clangtools/clangtoolsdiagnosticmodel.h b/src/plugins/clangtools/clangtoolsdiagnosticmodel.h index 3ac1df0d0c2..d9fb8b4cfb9 100644 --- a/src/plugins/clangtools/clangtoolsdiagnosticmodel.h +++ b/src/plugins/clangtools/clangtoolsdiagnosticmodel.h @@ -71,8 +71,9 @@ private: class DiagnosticItem : public Utils::TreeItem { public: - using OnFixitStatusChanged = std::function; - DiagnosticItem(const Diagnostic &diag, const OnFixitStatusChanged &onFixitStatusChanged, + using OnFixitStatusChanged = std::function; + DiagnosticItem(const Diagnostic &diag, + const OnFixitStatusChanged &onFixitStatusChanged, ClangToolsDiagnosticModel *parent); ~DiagnosticItem() override;