From 255e63bebb1758a4ab13040763437c56b720ea19 Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 31 Jul 2024 14:13:10 +0200 Subject: [PATCH] ProjectExplorer: Remove indirections when accessing AppOutputPane This intentionally keeps the lifetime (almost) identical. Change-Id: Ic420d8c5f89eaad33e38160bb8ee26965830047f Reviewed-by: Christian Kandeler --- src/plugins/projectexplorer/appoutputpane.cpp | 25 +++++++++++++-- src/plugins/projectexplorer/appoutputpane.h | 5 +++ .../projectexplorer/projectexplorer.cpp | 31 +++++++------------ src/plugins/projectexplorer/projectexplorer.h | 4 --- src/plugins/projectexplorer/runcontrol.cpp | 2 +- 5 files changed, 39 insertions(+), 28 deletions(-) diff --git a/src/plugins/projectexplorer/appoutputpane.cpp b/src/plugins/projectexplorer/appoutputpane.cpp index f03bf4c8ef5..c9be7bb9da8 100644 --- a/src/plugins/projectexplorer/appoutputpane.cpp +++ b/src/plugins/projectexplorer/appoutputpane.cpp @@ -857,7 +857,7 @@ class AppOutputSettingsWidget : public Core::IOptionsPageWidget public: AppOutputSettingsWidget() { - const AppOutputSettings &settings = ProjectExplorerPlugin::appOutputSettings(); + const AppOutputSettings &settings = appOutputPane().settings(); m_wrapOutputCheckBox.setText(Tr::tr("Word-wrap output")); m_wrapOutputCheckBox.setChecked(settings.wrapOutput); m_cleanOldOutputCheckBox.setText(Tr::tr("Clear old output on a new run")); @@ -909,7 +909,7 @@ public: m_debugOutputModeComboBox.currentData().toInt()); s.maxCharCount = m_maxCharsBox.value(); - ProjectExplorerPlugin::setAppOutputSettings(s); + appOutputPane().setSettings(s); } private: @@ -929,8 +929,27 @@ AppOutputSettingsPage::AppOutputSettingsPage() setWidgetCreator([] { return new AppOutputSettingsWidget; }); } +static QPointer theAppOutputPane; + +AppOutputPane &appOutputPane() +{ + QTC_CHECK(!theAppOutputPane.isNull()); + return *theAppOutputPane; +} + +void setupAppOutputPane() +{ + QTC_CHECK(theAppOutputPane.isNull()); + theAppOutputPane = new AppOutputPane; +} + +void destroyAppOutputPane() +{ + QTC_CHECK(!theAppOutputPane.isNull()); + delete theAppOutputPane; +} + } // namespace Internal } // namespace ProjectExplorer #include "appoutputpane.moc" - diff --git a/src/plugins/projectexplorer/appoutputpane.h b/src/plugins/projectexplorer/appoutputpane.h index fd9bb586395..39518c1154a 100644 --- a/src/plugins/projectexplorer/appoutputpane.h +++ b/src/plugins/projectexplorer/appoutputpane.h @@ -157,5 +157,10 @@ public: AppOutputSettingsPage(); }; +AppOutputPane &appOutputPane(); + +void setupAppOutputPane(); +void destroyAppOutputPane(); + } // namespace Internal } // namespace ProjectExplorer diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index fe96157ab1b..c91e221dd17 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -460,7 +460,7 @@ public: class ProjectExplorerPluginPrivate : public QObject { public: - ProjectExplorerPluginPrivate(); + ProjectExplorerPluginPrivate() = default; void updateContextMenuActions(Node *currentNode); void updateLocationSubMenus(); @@ -664,8 +664,6 @@ public: ConfigTaskHandler m_configTaskHandler{Task::compilerMissingTask(), Constants::KITS_SETTINGS_PAGE_ID}; ProjectManager m_sessionManager; - AppOutputPane m_outputPane; - ProjectTree m_projectTree; AllProjectsFilter m_allProjectsFilter; @@ -770,6 +768,9 @@ ProjectExplorerPlugin::~ProjectExplorerPlugin() delete dd->m_toolChainManager; delete dd; dd = nullptr; + + destroyAppOutputPane(); + m_instance = nullptr; #ifdef WITH_TESTS @@ -821,6 +822,8 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er dd = new ProjectExplorerPluginPrivate; + setupAppOutputPane(); + setupDesktopRunConfigurations(); setupDesktopRunWorker(); @@ -2155,7 +2158,7 @@ IPlugin::ShutdownFlag ProjectExplorerPlugin::aboutToShutdown() if (dd->m_activeRunControlCount == 0) return SynchronousShutdown; - dd->m_outputPane.closeTabsWithoutPrompt(); + appOutputPane().closeTabsWithoutPrompt(); dd->m_shutdownWatchDogId = dd->startTimer(10 * 1000); // Make sure we shutdown *somehow* return AsynchronousShutdown; } @@ -2459,7 +2462,7 @@ void ProjectExplorerPlugin::startRunControl(RunControl *runControl) void ProjectExplorerPlugin::showOutputPaneForRunControl(RunControl *runControl) { - dd->m_outputPane.showOutputPaneForRunControl(runControl); + appOutputPane().showOutputPaneForRunControl(runControl); } QList> ProjectExplorerPlugin::renameFiles( @@ -2494,7 +2497,7 @@ bool ProjectExplorerPlugin::renameFile(const Utils::FilePath &source, const Util void ProjectExplorerPluginPrivate::startRunControl(RunControl *runControl) { - m_outputPane.prepareRunControlStart(runControl); + appOutputPane().prepareRunControlStart(runControl); connect(runControl, &QObject::destroyed, this, &ProjectExplorerPluginPrivate::checkForShutdown, Qt::QueuedConnection); ++m_activeRunControlCount; @@ -2714,8 +2717,6 @@ bool ProjectExplorerPlugin::saveModifiedFiles() return true; } -ProjectExplorerPluginPrivate::ProjectExplorerPluginPrivate() {} - void ProjectExplorerPluginPrivate::extendFolderNavigationWidgetFactory() { auto folderNavigationWidgetFactory = FolderNavigationWidgetFactory::instance(); @@ -2905,7 +2906,7 @@ bool ProjectExplorerPlugin::coreAboutToClose() if (box.clickedButton() != closeAnyway) return false; } - return dd->m_outputPane.aboutToClose(); + return appOutputPane().aboutToClose(); } void ProjectExplorerPlugin::handleCommandLineArguments(const QStringList &arguments) @@ -2991,7 +2992,7 @@ void ProjectExplorerPlugin::runRunConfiguration(RunConfiguration *rc, QList ProjectExplorerPlugin::allRunControls() { - return dd->m_outputPane.allRunControls(); + return appOutputPane().allRunControls(); } void ProjectExplorerPluginPrivate::projectAdded(Project *pro) @@ -3997,16 +3998,6 @@ void ProjectExplorerPluginPrivate::handleSetStartupProject() setStartupProject(ProjectTree::currentProject()); } -void ProjectExplorerPlugin::setAppOutputSettings(const AppOutputSettings &settings) -{ - dd->m_outputPane.setSettings(settings); -} - -const AppOutputSettings &ProjectExplorerPlugin::appOutputSettings() -{ - return dd->m_outputPane.settings(); -} - void ProjectExplorerPlugin::setCustomParsers(const QList &settings) { if (dd->m_customParsers != settings) { diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h index 3c932f759e8..11f0be1dd33 100644 --- a/src/plugins/projectexplorer/projectexplorer.h +++ b/src/plugins/projectexplorer/projectexplorer.h @@ -33,7 +33,6 @@ class RunControl; class RunConfiguration; namespace Internal { -class AppOutputSettings; class MiniProjectTargetSelector; } @@ -116,9 +115,6 @@ public: bool delayedInitialize() override; ShutdownFlag aboutToShutdown() override; - static void setAppOutputSettings(const Internal::AppOutputSettings &settings); - static const Internal::AppOutputSettings &appOutputSettings(); - static void setCustomParsers(const QList &settings); static void addCustomParser(const CustomParserSettings &settings); static void removeCustomParser(Utils::Id id); diff --git a/src/plugins/projectexplorer/runcontrol.cpp b/src/plugins/projectexplorer/runcontrol.cpp index abce0345a1d..b9077653190 100644 --- a/src/plugins/projectexplorer/runcontrol.cpp +++ b/src/plugins/projectexplorer/runcontrol.cpp @@ -1281,7 +1281,7 @@ public: static QProcess::ProcessChannelMode defaultProcessChannelMode() { - return ProjectExplorerPlugin::appOutputSettings().mergeChannels + return appOutputPane().settings().mergeChannels ? QProcess::MergedChannels : QProcess::SeparateChannels; }