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 <christian.kandeler@qt.io>
This commit is contained in:
hjk
2020-02-24 15:55:15 +01:00
parent 4a9dc144f0
commit df7400b686
14 changed files with 31 additions and 23 deletions

View File

@@ -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);

View File

@@ -59,7 +59,7 @@ public:
if (auto debugAspect = aspect<Debugger::DebuggerRunConfigurationAspect>()) {
debugAspect->setUseQmlDebugger(enableQuick);
ProjectExplorer::ProjectExplorerPlugin::instance()->updateRunActions();
ProjectExplorer::ProjectExplorerPlugin::updateRunActions();
}
m_testConfig = config;
}

View File

@@ -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);

View File

@@ -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();

View File

@@ -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

View File

@@ -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;

View File

@@ -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) {

View File

@@ -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();
}
});
}

View File

@@ -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<QPair<QString, QString> > ProjectExplorerPluginPrivate::recentProjects() const
@@ -2889,7 +2887,8 @@ void ProjectExplorerPlugin::runRunConfiguration(RunConfiguration *rc,
dd->executeRunConfiguration(rc, runMode);
break;
}
emit m_instance->updateRunActions();
dd->doUpdateRunActions();
}
QList<QPair<Runnable, Utils::ProcessHandle>> 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<QPair<QString, QString> > ProjectExplorerPlugin::recentProjects()
{
return dd->recentProjects();

View File

@@ -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();

View File

@@ -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

View File

@@ -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();

View File

@@ -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);
}

View File

@@ -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);
//