From df7400b68606cfe43a8d268f814feca64b3fcdb9 Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 24 Feb 2020 15:55:15 +0100 Subject: [PATCH] ProjectExplorer: Disentangle ProjectExplorer::updateRunActions This enforces a linear pass through [static] ProjectExplorerPlugin::updateRunActions ProjectExplorerPluginPrivate::doUpdateRunAction [emit] ProjectExplorerPluginPrivate::runActionsUpdated instead of the previous direct emission of the signal from user code and connecting also the internal update to it. This is meant to simplify reasoning about execution order and maybe to help elimimating double executation. Change-Id: Id8cc41a46d9dec06afb5514855f2ae80560f3695 Reviewed-by: Christian Kandeler --- src/plugins/autotest/autotestplugin.cpp | 2 +- src/plugins/autotest/testrunconfiguration.h | 2 +- src/plugins/clangtools/clangtool.cpp | 2 +- src/plugins/cppcheck/cppcheckplugin.cpp | 2 +- src/plugins/debugger/debuggerplugin.cpp | 2 +- src/plugins/perfprofiler/perfprofilertool.cpp | 2 +- src/plugins/projectexplorer/appoutputpane.cpp | 2 +- .../projectexplorer/buildconfiguration.cpp | 2 +- .../projectexplorer/projectexplorer.cpp | 26 ++++++++++++------- src/plugins/projectexplorer/projectexplorer.h | 4 ++- .../projectexplorer/runconfiguration.cpp | 2 +- src/plugins/qmlprofiler/qmlprofilertool.cpp | 2 +- src/plugins/valgrind/callgrindtool.cpp | 2 +- src/plugins/valgrind/memchecktool.cpp | 2 +- 14 files changed, 31 insertions(+), 23 deletions(-) diff --git a/src/plugins/autotest/autotestplugin.cpp b/src/plugins/autotest/autotestplugin.cpp index 3dfaa4fad51..df73f237c6b 100644 --- a/src/plugins/autotest/autotestplugin.cpp +++ b/src/plugins/autotest/autotestplugin.cpp @@ -236,7 +236,7 @@ void AutotestPluginPrivate::initializeMenuEntries() this, &AutotestPlugin::updateMenuItemsEnabledState); connect(BuildManager::instance(), &BuildManager::buildQueueFinished, this, &AutotestPlugin::updateMenuItemsEnabledState); - connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::updateRunActions, + connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::runActionsUpdated, this, &AutotestPlugin::updateMenuItemsEnabledState); connect(TestTreeModel::instance(), &TestTreeModel::testTreeModelChanged, this, &AutotestPlugin::updateMenuItemsEnabledState); diff --git a/src/plugins/autotest/testrunconfiguration.h b/src/plugins/autotest/testrunconfiguration.h index 1c86f663591..df43b9dc86f 100644 --- a/src/plugins/autotest/testrunconfiguration.h +++ b/src/plugins/autotest/testrunconfiguration.h @@ -59,7 +59,7 @@ public: if (auto debugAspect = aspect()) { debugAspect->setUseQmlDebugger(enableQuick); - ProjectExplorer::ProjectExplorerPlugin::instance()->updateRunActions(); + ProjectExplorer::ProjectExplorerPlugin::updateRunActions(); } m_testConfig = config; } diff --git a/src/plugins/clangtools/clangtool.cpp b/src/plugins/clangtools/clangtool.cpp index a64ec2ea986..7536f57ad9a 100644 --- a/src/plugins/clangtools/clangtool.cpp +++ b/src/plugins/clangtools/clangtool.cpp @@ -602,7 +602,7 @@ ClangTool::ClangTool() update(); - connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::updateRunActions, + connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::runActionsUpdated, this, &ClangTool::update); connect(CppModelManager::instance(), &CppModelManager::projectPartsUpdated, this, &ClangTool::update); diff --git a/src/plugins/cppcheck/cppcheckplugin.cpp b/src/plugins/cppcheck/cppcheckplugin.cpp index 97bf20929e6..dcfb45aa4c9 100644 --- a/src/plugins/cppcheck/cppcheckplugin.cpp +++ b/src/plugins/cppcheck/cppcheckplugin.cpp @@ -176,7 +176,7 @@ bool CppcheckPlugin::initialize(const QStringList &arguments, QString *errorStri } using ProjectExplorer::ProjectExplorerPlugin; - connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::updateRunActions, + connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::runActionsUpdated, d.get(), &CppcheckPluginPrivate::updateManualRunAction); d->updateManualRunAction(); diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index 5fdf0015e1b..73c8a2ade8b 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -1186,7 +1186,7 @@ DebuggerPluginPrivate::DebuggerPluginPrivate(const QStringList &arguments) this, &DebuggerPluginPrivate::writeSettings); // ProjectExplorer - connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::updateRunActions, + connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::runActionsUpdated, this, &DebuggerPluginPrivate::updatePresetState); // EditorManager diff --git a/src/plugins/perfprofiler/perfprofilertool.cpp b/src/plugins/perfprofiler/perfprofilertool.cpp index 5dc99eeceab..8176432c179 100644 --- a/src/plugins/perfprofiler/perfprofilertool.cpp +++ b/src/plugins/perfprofiler/perfprofilertool.cpp @@ -159,7 +159,7 @@ PerfProfilerTool::PerfProfilerTool() tracePointsAction->setEnabled(m_startAction->isEnabled()); }); - connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::updateRunActions, + connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::runActionsUpdated, this, &PerfProfilerTool::updateRunActions); m_recordButton = new QToolButton; diff --git a/src/plugins/projectexplorer/appoutputpane.cpp b/src/plugins/projectexplorer/appoutputpane.cpp index c777a61ee89..4f866490a10 100644 --- a/src/plugins/projectexplorer/appoutputpane.cpp +++ b/src/plugins/projectexplorer/appoutputpane.cpp @@ -779,7 +779,7 @@ void AppOutputPane::slotRunControlFinished2(RunControl *sender) if (current && current == sender) enableButtons(current); - emit ProjectExplorerPlugin::instance()->updateRunActions(); + ProjectExplorerPlugin::updateRunActions(); #ifdef Q_OS_WIN const bool isRunning = Utils::anyOf(m_runControlTabs, [](const RunControlTab &rt) { diff --git a/src/plugins/projectexplorer/buildconfiguration.cpp b/src/plugins/projectexplorer/buildconfiguration.cpp index a6262cf69d1..c7269480ce9 100644 --- a/src/plugins/projectexplorer/buildconfiguration.cpp +++ b/src/plugins/projectexplorer/buildconfiguration.cpp @@ -141,7 +141,7 @@ BuildConfiguration::BuildConfiguration(Target *target, Core::Id id) connect(this, &BuildConfiguration::enabledChanged, this, [this] { if (isActive() && project() == SessionManager::startupProject()) { ProjectExplorerPlugin::updateActions(); - emit ProjectExplorerPlugin::instance()->updateRunActions(); + ProjectExplorerPlugin::updateRunActions(); } }); } diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index 3f35d0b34e2..b99c4384f57 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -453,7 +453,7 @@ public: void activeRunConfigurationChanged(); void activeBuildConfigurationChanged(); - void slotUpdateRunActions(); + void doUpdateRunActions(); void currentModeChanged(Core::Id mode, Core::Id oldMode); @@ -1705,8 +1705,6 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er connect(dd->m_projectTreeExpandAllAction, &QAction::triggered, ProjectTree::instance(), &ProjectTree::expandAll); - connect(this, &ProjectExplorerPlugin::updateRunActions, - dd, &ProjectExplorerPluginPrivate::slotUpdateRunActions); connect(this, &ProjectExplorerPlugin::settingsChanged, dd, &ProjectExplorerPluginPrivate::updateRunWithoutDeployMenu); @@ -2469,7 +2467,7 @@ void ProjectExplorerPluginPrivate::startRunControl(RunControl *runControl) Qt::QueuedConnection); ++m_activeRunControlCount; runControl->initiateStart(); - emit m_instance->updateRunActions(); + doUpdateRunActions(); } void ProjectExplorerPluginPrivate::showOutputPaneForRunControl(RunControl *runControl) @@ -2526,7 +2524,7 @@ void ProjectExplorerPluginPrivate::buildQueueFinished(bool success) m_delayedRunConfiguration = nullptr; m_shouldHaveRunConfiguration = false; m_runMode = Constants::NO_RUN_MODE; - emit m_instance->updateRunActions(); + doUpdateRunActions(); } QList > ProjectExplorerPluginPrivate::recentProjects() const @@ -2889,7 +2887,8 @@ void ProjectExplorerPlugin::runRunConfiguration(RunConfiguration *rc, dd->executeRunConfiguration(rc, runMode); break; } - emit m_instance->updateRunActions(); + + dd->doUpdateRunActions(); } QList> ProjectExplorerPlugin::runningRunControlProcesses() @@ -2987,7 +2986,7 @@ void ProjectExplorerPluginPrivate::activeRunConfigurationChanged() if (rc == previousRunConfiguration) return; updateActions(); - emit m_instance->updateRunActions(); + doUpdateRunActions(); } void ProjectExplorerPluginPrivate::activeBuildConfigurationChanged() @@ -3001,7 +3000,7 @@ void ProjectExplorerPluginPrivate::activeBuildConfigurationChanged() return; updateActions(); - emit m_instance->updateRunActions(); + doUpdateRunActions(); } void ProjectExplorerPluginPrivate::updateDeployActions() @@ -3050,7 +3049,7 @@ void ProjectExplorerPluginPrivate::updateDeployActions() enableDeploySessionAction = false; m_deploySessionAction->setEnabled(enableDeploySessionAction); - emit m_instance->updateRunActions(); + doUpdateRunActions(); } bool ProjectExplorerPlugin::canRunStartupProject(Core::Id runMode, QString *whyNot) @@ -3125,13 +3124,15 @@ bool ProjectExplorerPlugin::canRunStartupProject(Core::Id runMode, QString *whyN return true; } -void ProjectExplorerPluginPrivate::slotUpdateRunActions() +void ProjectExplorerPluginPrivate::doUpdateRunActions() { QString whyNot; const bool state = ProjectExplorerPlugin::canRunStartupProject(Constants::NORMAL_RUN_MODE, &whyNot); m_runAction->setEnabled(state); m_runAction->setToolTip(whyNot); m_runWithoutDeployAction->setEnabled(state); + + emit m_instance->runActionsUpdated(); } void ProjectExplorerPluginPrivate::addToRecentProjects(const QString &fileName, const QString &displayName) @@ -3988,6 +3989,11 @@ void ProjectExplorerPlugin::removeFromRecentProjects(const QString &fileName, dd->removeFromRecentProjects(fileName, displayName); } +void ProjectExplorerPlugin::updateRunActions() +{ + dd->doUpdateRunActions(); +} + QList > ProjectExplorerPlugin::recentProjects() { return dd->recentProjects(); diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h index 91f14acd5bb..55870aefa1c 100644 --- a/src/plugins/projectexplorer/projectexplorer.h +++ b/src/plugins/projectexplorer/projectexplorer.h @@ -180,6 +180,8 @@ public: static void clearRecentProjects(); static void removeFromRecentProjects(const QString &fileName, const QString &displayName); + static void updateRunActions(); + signals: void finishedInitialization(); @@ -191,7 +193,7 @@ signals: void settingsChanged(); - void updateRunActions(); + void runActionsUpdated(); private: static bool coreAboutToClose(); diff --git a/src/plugins/projectexplorer/runconfiguration.cpp b/src/plugins/projectexplorer/runconfiguration.cpp index 303f6298a56..1b79a610c58 100644 --- a/src/plugins/projectexplorer/runconfiguration.cpp +++ b/src/plugins/projectexplorer/runconfiguration.cpp @@ -303,7 +303,7 @@ void RunConfiguration::update() const bool isActive = target()->isActive() && target()->activeRunConfiguration() == this; if (isActive && project() == SessionManager::startupProject()) - emit ProjectExplorerPlugin::instance()->updateRunActions(); + ProjectExplorerPlugin::updateRunActions(); } BuildTargetInfo RunConfiguration::buildTargetInfo() const diff --git a/src/plugins/qmlprofiler/qmlprofilertool.cpp b/src/plugins/qmlprofiler/qmlprofilertool.cpp index c14d60d3842..274935b8a40 100644 --- a/src/plugins/qmlprofiler/qmlprofilertool.cpp +++ b/src/plugins/qmlprofiler/qmlprofilertool.cpp @@ -243,7 +243,7 @@ QmlProfilerTool::QmlProfilerTool() perspective->addToolBarWidget(d->m_displayFeaturesButton); perspective->addToolBarWidget(d->m_timeLabel); - connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::updateRunActions, + connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::runActionsUpdated, this, &QmlProfilerTool::updateRunActions); QmlProfilerTextMarkModel *model = d->m_profilerModelManager->textMarkModel(); diff --git a/src/plugins/valgrind/callgrindtool.cpp b/src/plugins/valgrind/callgrindtool.cpp index a6e5f078d6b..92ed908ac96 100644 --- a/src/plugins/valgrind/callgrindtool.cpp +++ b/src/plugins/valgrind/callgrindtool.cpp @@ -530,7 +530,7 @@ CallgrindToolPrivate::CallgrindToolPrivate() m_perspective.addWindow(m_visualization, Perspective::SplitVertical, nullptr, false, Qt::RightDockWidgetArea); - connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::updateRunActions, + connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::runActionsUpdated, this, &CallgrindToolPrivate::updateRunActions); } diff --git a/src/plugins/valgrind/memchecktool.cpp b/src/plugins/valgrind/memchecktool.cpp index 64475eba242..fd8025fc8b1 100644 --- a/src/plugins/valgrind/memchecktool.cpp +++ b/src/plugins/valgrind/memchecktool.cpp @@ -571,7 +571,7 @@ MemcheckToolPrivate::MemcheckToolPrivate() m_perspective.addWindow(m_errorView, Perspective::SplitVertical, nullptr); - connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::updateRunActions, + connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::runActionsUpdated, this, &MemcheckToolPrivate::maybeActiveRunConfigurationChanged); //