ProjectExplorerPlugin: Remove remaining used of global object pool

By moving ownership of the respective objects to the
pre-existing private class by making them full members,
following the general pattern used in the other plugins.

Change-Id: Ifea639b68f25f0cbcb06230dc71a16d1dd3ae5ac
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
hjk
2018-02-09 17:08:29 +01:00
parent 8801240881
commit 95deefb5ac
3 changed files with 103 additions and 112 deletions

View File

@@ -107,6 +107,7 @@ private:
friend class Internal::DeviceManagerPrivate; friend class Internal::DeviceManagerPrivate;
friend class ProjectExplorerPlugin; friend class ProjectExplorerPlugin;
friend class ProjectExplorerPluginPrivate;
}; };
} // namespace ProjectExplorer } // namespace ProjectExplorer

View File

@@ -258,6 +258,21 @@ static bool isTextFile(const QString &fileName)
TextEditor::Constants::C_TEXTEDITOR_MIMETYPE_TEXT); TextEditor::Constants::C_TEXTEDITOR_MIMETYPE_TEXT);
} }
class ProjectsMode : public IMode
{
public:
ProjectsMode()
{
setContext(Context(Constants::C_PROJECTEXPLORER));
setDisplayName(QCoreApplication::translate("ProjectExplorer::ProjectsMode", "Projects"));
setIcon(Utils::Icon::modeIcon(Icons::MODE_PROJECT_CLASSIC,
Icons::MODE_PROJECT_FLAT, Icons::MODE_PROJECT_FLAT_ACTIVE));
setPriority(Constants::P_MODE_SESSION);
setId(Constants::MODE_SESSION);
setContextHelpId(QLatin1String("Managing Projects"));
}
};
class ProjectExplorerPluginPrivate : public QObject class ProjectExplorerPluginPrivate : public QObject
{ {
Q_DECLARE_TR_FUNCTIONS(ProjectExplorer::ProjectExplorerPlugin) Q_DECLARE_TR_FUNCTIONS(ProjectExplorer::ProjectExplorerPlugin)
@@ -399,7 +414,6 @@ public:
QString m_sessionToRestoreAtStartup; QString m_sessionToRestoreAtStartup;
QStringList m_profileMimeTypes; QStringList m_profileMimeTypes;
AppOutputPane *m_outputPane = nullptr;
int m_activeRunControlCount = 0; int m_activeRunControlCount = 0;
int m_shutdownWatchDogId = -1; int m_shutdownWatchDogId = -1;
@@ -416,33 +430,76 @@ public:
bool m_shouldHaveRunConfiguration = false; bool m_shouldHaveRunConfiguration = false;
bool m_shuttingDown = false; bool m_shuttingDown = false;
Core::Id m_runMode = Constants::NO_RUN_MODE; Core::Id m_runMode = Constants::NO_RUN_MODE;
ProjectWelcomePage *m_welcomePage = nullptr;
IMode *m_projectsMode = nullptr;
TaskHub *m_taskHub = nullptr;
KitManager *m_kitManager = nullptr; KitManager *m_kitManager = nullptr;
ToolChainManager *m_toolChainManager = nullptr; ToolChainManager *m_toolChainManager = nullptr;
QStringList m_arguments; QStringList m_arguments;
#ifdef WITH_JOURNALD #ifdef WITH_JOURNALD
JournaldWatcher *m_journalWatcher = nullptr; JournaldWatcher m_journalWatcher;
#endif #endif
QThreadPool m_threadPool; QThreadPool m_threadPool;
};
class ProjectsMode : public IMode DeviceManager m_deviceManager{true};
{
public: #ifdef Q_OS_WINDOWS
ProjectsMode(QWidget *proWindow) WinDebugInterface m_winDebugInterface;
{ MsvcToolChainFactory m_mscvToolChainFactory;
setWidget(proWindow); #else
setContext(Context(Constants::C_PROJECTEXPLORER)); LinuxIccToolChainFactory m_linuxToolChainFactory;
setDisplayName(QCoreApplication::translate("ProjectExplorer::ProjectsMode", "Projects")); #endif
setIcon(Utils::Icon::modeIcon(Icons::MODE_PROJECT_CLASSIC,
Icons::MODE_PROJECT_FLAT, Icons::MODE_PROJECT_FLAT_ACTIVE)); #ifndef Q_OS_MACOS
setPriority(Constants::P_MODE_SESSION); MingwToolChainFactory m_mingwToolChainFactory; // Mingw offers cross-compiling to windows
setId(Constants::MODE_SESSION); #endif
setContextHelpId(QLatin1String("Managing Projects"));
} GccToolChainFactory m_gccToolChainFactory;
ClangToolChainFactory m_clangToolChainFactory;
CustomToolChainFactory m_customToolChainFactory;
DesktopDeviceFactory m_desktopDeviceFactory;
ToolChainOptionsPage m_toolChainOptionsPage;
KitOptionsPage m_kitOptionsPage;
TaskHub m_taskHub;
ProjectWelcomePage m_welcomePage;
CustomWizardMetaFactory<CustomProjectWizard> m_customProjectWizard{IWizardFactory::ProjectWizard};
CustomWizardMetaFactory<CustomWizard> m_fileWizard{IWizardFactory::FileWizard};
ProjectsMode m_projectsMode;
CopyTaskHandler m_copyTaskHandler;
ShowInEditorTaskHandler m_showInEditorTaskHandler;
VcsAnnotateTaskHandler m_vcsAnnotateTaskHandler;
RemoveTaskHandler m_removeTaskHandler;
ConfigTaskHandler m_configTaskHandler{Task::compilerMissingTask(), Constants::KITS_SETTINGS_PAGE_ID};
AppOutputPane m_outputPane;
AllProjectsFilter m_allProjectsFilter;
CurrentProjectFilter m_currentProjectFilter;
ProcessStepFactory m_processStepFactory;
AllProjectsFind m_allProjectsFind;
CurrentProjectFind m_curretProjectFind;
CustomExecutableRunConfigurationFactory m_customExecutableRunConfigFactory;
ProjectFileWizardExtension m_projectFileWizardExtension;
// Settings pages
ProjectExplorerSettingsPage m_projectExplorerSettingsPage;
DeviceSettingsPage m_deviceSettingsPage;
ProjectTreeWidgetFactory m_projectTreeFactory;
FolderNavigationWidgetFactory m_folderNavigationWidgetFactory;
DefaultDeployConfigurationFactory m_defaultDeployConfigFactory;
IDocumentFactory m_documentFactory;
}; };
static ProjectExplorerPlugin *m_instance = nullptr; static ProjectExplorerPlugin *m_instance = nullptr;
@@ -451,7 +508,6 @@ static ProjectExplorerPluginPrivate *dd = nullptr;
ProjectExplorerPlugin::ProjectExplorerPlugin() ProjectExplorerPlugin::ProjectExplorerPlugin()
{ {
m_instance = this; m_instance = this;
dd = new ProjectExplorerPluginPrivate;
} }
ProjectExplorerPlugin::~ProjectExplorerPlugin() ProjectExplorerPlugin::~ProjectExplorerPlugin()
@@ -462,9 +518,6 @@ ProjectExplorerPlugin::~ProjectExplorerPlugin()
// Force sequence of deletion: // Force sequence of deletion:
delete dd->m_kitManager; // remove all the profile information delete dd->m_kitManager; // remove all the profile information
delete dd->m_toolChainManager; delete dd->m_toolChainManager;
#ifdef WITH_JOURNALD
delete dd->m_journalWatcher;
#endif
ProjectPanelFactory::destroyFactories(); ProjectPanelFactory::destroyFactories();
delete dd; delete dd;
} }
@@ -478,33 +531,14 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
{ {
Q_UNUSED(error); Q_UNUSED(error);
dd = new ProjectExplorerPluginPrivate;
qRegisterMetaType<ProjectExplorer::RunControl *>(); qRegisterMetaType<ProjectExplorer::RunControl *>();
qRegisterMetaType<ProjectExplorer::DeployableFile>("ProjectExplorer::DeployableFile"); qRegisterMetaType<ProjectExplorer::DeployableFile>("ProjectExplorer::DeployableFile");
CustomWizard::setVerbose(arguments.count(QLatin1String("-customwizard-verbose"))); CustomWizard::setVerbose(arguments.count(QLatin1String("-customwizard-verbose")));
JsonWizardFactory::setVerbose(arguments.count(QLatin1String("-customwizard-verbose"))); JsonWizardFactory::setVerbose(arguments.count(QLatin1String("-customwizard-verbose")));
addAutoReleasedObject(new DeviceManager);
#ifdef WITH_JOURNALD
dd->m_journalWatcher = new JournaldWatcher;
#endif
// Add ToolChainFactories:
if (Utils::HostOsInfo::isWindowsHost()) {
addAutoReleasedObject(new WinDebugInterface);
addAutoReleasedObject(new MsvcToolChainFactory);
} else {
addAutoReleasedObject(new LinuxIccToolChainFactory);
}
if (!Utils::HostOsInfo::isMacHost())
addAutoReleasedObject(new MingwToolChainFactory); // Mingw offers cross-compiling to windows
addAutoReleasedObject(new GccToolChainFactory);
addAutoReleasedObject(new ClangToolChainFactory);
addAutoReleasedObject(new CustomToolChainFactory);
addAutoReleasedObject(new DesktopDeviceFactory);
dd->m_kitManager = new KitManager; // register before ToolChainManager dd->m_kitManager = new KitManager; // register before ToolChainManager
dd->m_toolChainManager = new ToolChainManager; dd->m_toolChainManager = new ToolChainManager;
@@ -521,11 +555,6 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
KitManager::registerKitInformation(new SysRootKitInformation); KitManager::registerKitInformation(new SysRootKitInformation);
KitManager::registerKitInformation(new EnvironmentKitInformation); KitManager::registerKitInformation(new EnvironmentKitInformation);
addAutoReleasedObject(new ToolChainOptionsPage);
addAutoReleasedObject(new KitOptionsPage);
addAutoReleasedObject(new TaskHub);
IWizardFactory::registerFactoryCreator([]() -> QList<IWizardFactory *> { IWizardFactory::registerFactoryCreator([]() -> QList<IWizardFactory *> {
QList<IWizardFactory *> result; QList<IWizardFactory *> result;
result << CustomWizard::createWizards(); result << CustomWizard::createWizards();
@@ -533,8 +562,7 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
return result; return result;
}); });
dd->m_welcomePage = new ProjectWelcomePage; connect(&dd->m_welcomePage, &ProjectWelcomePage::manageSessions,
connect(dd->m_welcomePage, &ProjectWelcomePage::manageSessions,
dd, &ProjectExplorerPluginPrivate::showSessionManager); dd, &ProjectExplorerPluginPrivate::showSessionManager);
auto sessionManager = new SessionManager(this); auto sessionManager = new SessionManager(this);
@@ -572,9 +600,6 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
: Utils::FileName()); : Utils::FileName());
}); });
addAutoReleasedObject(new CustomWizardMetaFactory<CustomProjectWizard>(IWizardFactory::ProjectWizard));
addAutoReleasedObject(new CustomWizardMetaFactory<CustomWizard>(IWizardFactory::FileWizard));
// For JsonWizard: // For JsonWizard:
JsonWizardFactory::registerPageFactory(new FieldPageFactory); JsonWizardFactory::registerPageFactory(new FieldPageFactory);
JsonWizardFactory::registerPageFactory(new FilePageFactory); JsonWizardFactory::registerPageFactory(new FilePageFactory);
@@ -589,26 +614,13 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
Context projecTreeContext(Constants::C_PROJECT_TREE); Context projecTreeContext(Constants::C_PROJECT_TREE);
dd->m_projectsMode = new ProjectsMode(dd->m_proWindow); dd->m_projectsMode.setWidget(dd->m_proWindow);
dd->m_projectsMode->setEnabled(false); dd->m_projectsMode.setEnabled(false);
addAutoReleasedObject(dd->m_projectsMode);
addAutoReleasedObject(new CopyTaskHandler);
addAutoReleasedObject(new ShowInEditorTaskHandler);
addAutoReleasedObject(new VcsAnnotateTaskHandler);
addAutoReleasedObject(new RemoveTaskHandler);
addAutoReleasedObject(new ConfigTaskHandler(Task::compilerMissingTask(),
Constants::KITS_SETTINGS_PAGE_ID));
ICore::addPreCloseListener([]() -> bool { return coreAboutToClose(); }); ICore::addPreCloseListener([]() -> bool { return coreAboutToClose(); });
dd->m_outputPane = new AppOutputPane;
addAutoReleasedObject(dd->m_outputPane);
connect(SessionManager::instance(), &SessionManager::projectRemoved, connect(SessionManager::instance(), &SessionManager::projectRemoved,
dd->m_outputPane, &AppOutputPane::projectRemoved); &dd->m_outputPane, &AppOutputPane::projectRemoved);
addAutoReleasedObject(new AllProjectsFilter);
addAutoReleasedObject(new CurrentProjectFilter);
// ProjectPanelFactories // ProjectPanelFactories
auto panelFactory = new ProjectPanelFactory; auto panelFactory = new ProjectPanelFactory;
@@ -632,11 +644,6 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
panelFactory->setCreateWidgetFunction([](Project *project) { return new DependenciesWidget(project); }); panelFactory->setCreateWidgetFunction([](Project *project) { return new DependenciesWidget(project); });
ProjectPanelFactory::registerFactory(panelFactory); ProjectPanelFactory::registerFactory(panelFactory);
addAutoReleasedObject(new ProcessStepFactory);
addAutoReleasedObject(new AllProjectsFind);
addAutoReleasedObject(new CurrentProjectFind);
auto constraint = [](RunConfiguration *runConfiguration) { auto constraint = [](RunConfiguration *runConfiguration) {
const Runnable runnable = runConfiguration->runnable(); const Runnable runnable = runConfiguration->runnable();
if (!runnable.is<StandardRunnable>()) if (!runnable.is<StandardRunnable>())
@@ -650,14 +657,6 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
}; };
RunControl::registerWorker<SimpleTargetRunner>(Constants::NORMAL_RUN_MODE, constraint); RunControl::registerWorker<SimpleTargetRunner>(Constants::NORMAL_RUN_MODE, constraint);
addAutoReleasedObject(new CustomExecutableRunConfigurationFactory);
addAutoReleasedObject(new ProjectFileWizardExtension);
// Settings pages
addAutoReleasedObject(new ProjectExplorerSettingsPage);
addAutoReleasedObject(new DeviceSettingsPage);
// context menus // context menus
ActionContainer *msessionContextMenu = ActionContainer *msessionContextMenu =
ActionManager::createMenu(Constants::M_SESSIONCONTEXT); ActionManager::createMenu(Constants::M_SESSIONCONTEXT);
@@ -1187,10 +1186,6 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
dd->updateWelcomePage(); dd->updateWelcomePage();
}); });
addAutoReleasedObject(new ProjectTreeWidgetFactory);
addAutoReleasedObject(new FolderNavigationWidgetFactory);
addAutoReleasedObject(new DefaultDeployConfigurationFactory);
QSettings *s = ICore::settings(); QSettings *s = ICore::settings();
const QStringList fileNames = const QStringList fileNames =
s->value(QLatin1String("ProjectExplorer/RecentProjects/FileNames")).toStringList(); s->value(QLatin1String("ProjectExplorer/RecentProjects/FileNames")).toStringList();
@@ -1600,8 +1595,7 @@ void ProjectExplorerPlugin::extensionsInitialized()
const QString filterSeparator = QLatin1String(";;"); const QString filterSeparator = QLatin1String(";;");
QStringList filterStrings; QStringList filterStrings;
auto factory = new IDocumentFactory; dd->m_documentFactory.setOpener([](QString fileName) {
factory->setOpener([](QString fileName) -> IDocument* {
const QFileInfo fi(fileName); const QFileInfo fi(fileName);
if (fi.isDir()) if (fi.isDir())
fileName = FolderNavigationWidget::projectFilesInDirectory(fi.absoluteFilePath()).value(0, fileName); fileName = FolderNavigationWidget::projectFilesInDirectory(fi.absoluteFilePath()).value(0, fileName);
@@ -1612,17 +1606,15 @@ void ProjectExplorerPlugin::extensionsInitialized()
return nullptr; return nullptr;
}); });
factory->addMimeType(QStringLiteral("inode/directory")); dd->m_documentFactory.addMimeType(QStringLiteral("inode/directory"));
for (const QString &mimeType : dd->m_projectCreators.keys()) { for (const QString &mimeType : dd->m_projectCreators.keys()) {
factory->addMimeType(mimeType); dd->m_documentFactory.addMimeType(mimeType);
Utils::MimeType mime = Utils::mimeTypeForName(mimeType); Utils::MimeType mime = Utils::mimeTypeForName(mimeType);
allGlobPatterns.append(mime.globPatterns()); allGlobPatterns.append(mime.globPatterns());
filterStrings.append(mime.filterString()); filterStrings.append(mime.filterString());
dd->m_profileMimeTypes += mimeType; dd->m_profileMimeTypes += mimeType;
} }
addAutoReleasedObject(factory);
QString allProjectsFilter = tr("All Projects"); QString allProjectsFilter = tr("All Projects");
allProjectsFilter += QLatin1String(" (") + allGlobPatterns.join(QLatin1Char(' ')) allProjectsFilter += QLatin1String(" (") + allGlobPatterns.join(QLatin1Char(' '))
+ QLatin1Char(')'); + QLatin1Char(')');
@@ -1655,17 +1647,16 @@ ExtensionSystem::IPlugin::ShutdownFlag ProjectExplorerPlugin::aboutToShutdown()
dd, &ProjectExplorerPluginPrivate::currentModeChanged); dd, &ProjectExplorerPluginPrivate::currentModeChanged);
ProjectTree::aboutToShutDown(); ProjectTree::aboutToShutDown();
SessionManager::closeAllProjects(); SessionManager::closeAllProjects();
dd->m_projectsMode = nullptr;
dd->m_shuttingDown = true; dd->m_shuttingDown = true;
// Attempt to synchronously shutdown all run controls. // Attempt to synchronously shutdown all run controls.
// If that fails, fall back to asynchronous shutdown (Debugger run controls // If that fails, fall back to asynchronous shutdown (Debugger run controls
// might shutdown asynchronously). // might shutdown asynchronously).
delete dd->m_welcomePage;
if (dd->m_activeRunControlCount == 0) if (dd->m_activeRunControlCount == 0)
return SynchronousShutdown; return SynchronousShutdown;
dd->m_outputPane->closeTabs(AppOutputPane::CloseTabNoPrompt /* No prompt any more */); dd->m_outputPane.closeTabs(AppOutputPane::CloseTabNoPrompt /* No prompt any more */);
dd->m_shutdownWatchDogId = dd->startTimer(10 * 1000); // Make sure we shutdown *somehow* dd->m_shutdownWatchDogId = dd->startTimer(10 * 1000); // Make sure we shutdown *somehow*
return AsynchronousShutdown; return AsynchronousShutdown;
} }
@@ -1883,7 +1874,7 @@ ProjectExplorerPlugin::OpenProjectResult ProjectExplorerPlugin::openProjects(con
void ProjectExplorerPluginPrivate::updateWelcomePage() void ProjectExplorerPluginPrivate::updateWelcomePage()
{ {
m_welcomePage->reloadWelcomeScreenData(); m_welcomePage.reloadWelcomeScreenData();
} }
void ProjectExplorerPluginPrivate::currentModeChanged(Id mode, Id oldMode) void ProjectExplorerPluginPrivate::currentModeChanged(Id mode, Id oldMode)
@@ -1997,7 +1988,7 @@ void ProjectExplorerPluginPrivate::restoreSession()
// update welcome page // update welcome page
connect(ModeManager::instance(), &ModeManager::currentModeChanged, connect(ModeManager::instance(), &ModeManager::currentModeChanged,
dd, &ProjectExplorerPluginPrivate::currentModeChanged); dd, &ProjectExplorerPluginPrivate::currentModeChanged);
connect(dd->m_welcomePage, &ProjectWelcomePage::requestProject, connect(&dd->m_welcomePage, &ProjectWelcomePage::requestProject,
m_instance, &ProjectExplorerPlugin::openProjectWelcomePage); m_instance, &ProjectExplorerPlugin::openProjectWelcomePage);
dd->m_arguments = arguments; dd->m_arguments = arguments;
// delay opening projects from the command line even more // delay opening projects from the command line even more
@@ -2061,13 +2052,13 @@ void ProjectExplorerPlugin::startRunControl(RunControl *runControl)
void ProjectExplorerPluginPrivate::startRunControl(RunControl *runControl) void ProjectExplorerPluginPrivate::startRunControl(RunControl *runControl)
{ {
m_outputPane->createNewOutputWindow(runControl); m_outputPane.createNewOutputWindow(runControl);
m_outputPane->flash(); // one flash for starting m_outputPane.flash(); // one flash for starting
m_outputPane->showTabFor(runControl); m_outputPane.showTabFor(runControl);
Core::Id runMode = runControl->runMode(); Core::Id runMode = runControl->runMode();
bool popup = (runMode == Constants::NORMAL_RUN_MODE && dd->m_projectExplorerSettings.showRunOutput) bool popup = (runMode == Constants::NORMAL_RUN_MODE && dd->m_projectExplorerSettings.showRunOutput)
|| (runMode == Constants::DEBUG_RUN_MODE && m_projectExplorerSettings.showDebugOutput); || (runMode == Constants::DEBUG_RUN_MODE && m_projectExplorerSettings.showDebugOutput);
m_outputPane->setBehaviorOnOutput(runControl, popup ? AppOutputPane::Popup : AppOutputPane::Flash); m_outputPane.setBehaviorOnOutput(runControl, popup ? AppOutputPane::Popup : AppOutputPane::Flash);
connect(runControl, &QObject::destroyed, this, &ProjectExplorerPluginPrivate::checkForShutdown, connect(runControl, &QObject::destroyed, this, &ProjectExplorerPluginPrivate::checkForShutdown,
Qt::QueuedConnection); Qt::QueuedConnection);
++m_activeRunControlCount; ++m_activeRunControlCount;
@@ -2344,7 +2335,7 @@ int ProjectExplorerPluginPrivate::queue(QList<Project *> projects, QList<Id> ste
&& stepIds.contains(Constants::BUILDSTEPS_BUILD)) { && stepIds.contains(Constants::BUILDSTEPS_BUILD)) {
ProjectExplorerSettings::StopBeforeBuild stopCondition = m_projectExplorerSettings.stopBeforeBuild; ProjectExplorerSettings::StopBeforeBuild stopCondition = m_projectExplorerSettings.stopBeforeBuild;
const QList<RunControl *> toStop const QList<RunControl *> toStop
= Utils::filtered(m_outputPane->allRunControls(), [&projects, stopCondition](RunControl *rc) -> bool { = Utils::filtered(m_outputPane.allRunControls(), [&projects, stopCondition](RunControl *rc) -> bool {
if (!rc->isRunning()) if (!rc->isRunning())
return false; return false;
@@ -2541,7 +2532,7 @@ bool ProjectExplorerPlugin::coreAboutToClose()
if (box.clickedButton() != closeAnyway) if (box.clickedButton() != closeAnyway)
return false; return false;
} }
if (!dd->m_outputPane->aboutToClose()) if (!dd->m_outputPane.aboutToClose())
return false; return false;
return true; return true;
} }
@@ -2604,7 +2595,7 @@ void ProjectExplorerPlugin::runRunConfiguration(RunConfiguration *rc,
QList<QPair<Runnable, Utils::ProcessHandle>> ProjectExplorerPlugin::runningRunControlProcesses() QList<QPair<Runnable, Utils::ProcessHandle>> ProjectExplorerPlugin::runningRunControlProcesses()
{ {
QList<QPair<Runnable, Utils::ProcessHandle>> processes; QList<QPair<Runnable, Utils::ProcessHandle>> processes;
foreach (RunControl *rc, dd->m_outputPane->allRunControls()) { foreach (RunControl *rc, dd->m_outputPane.allRunControls()) {
if (rc->isRunning()) if (rc->isRunning())
processes << qMakePair(rc->runnable(), rc->applicationProcessHandle()); processes << qMakePair(rc->runnable(), rc->applicationProcessHandle());
} }
@@ -2613,8 +2604,8 @@ QList<QPair<Runnable, Utils::ProcessHandle>> ProjectExplorerPlugin::runningRunCo
void ProjectExplorerPluginPrivate::projectAdded(Project *pro) void ProjectExplorerPluginPrivate::projectAdded(Project *pro)
{ {
if (m_projectsMode) m_projectsMode.setEnabled(true);
m_projectsMode->setEnabled(true);
// more specific action en and disabling ? // more specific action en and disabling ?
pro->subscribeSignal(&BuildConfiguration::enabledChanged, this, [this]() { pro->subscribeSignal(&BuildConfiguration::enabledChanged, this, [this]() {
auto bc = qobject_cast<BuildConfiguration *>(sender()); auto bc = qobject_cast<BuildConfiguration *>(sender());
@@ -2633,8 +2624,7 @@ void ProjectExplorerPluginPrivate::projectAdded(Project *pro)
void ProjectExplorerPluginPrivate::projectRemoved(Project *pro) void ProjectExplorerPluginPrivate::projectRemoved(Project *pro)
{ {
Q_UNUSED(pro); Q_UNUSED(pro);
if (m_projectsMode) m_projectsMode.setEnabled(SessionManager::hasProjects());
m_projectsMode->setEnabled(SessionManager::hasProjects());
} }
void ProjectExplorerPluginPrivate::projectDisplayNameChanged(Project *pro) void ProjectExplorerPluginPrivate::projectDisplayNameChanged(Project *pro)

View File

@@ -79,7 +79,7 @@ private:
static QVector<Core::Id> m_registeredCategories; static QVector<Core::Id> m_registeredCategories;
friend class ProjectExplorerPlugin; friend class ProjectExplorerPluginPrivate;
}; };
} // namespace ProjectExplorer } // namespace ProjectExplorer