From 53d14fbb4829dedf334ca8c42b7459b55c3c54bc Mon Sep 17 00:00:00 2001 From: hjk Date: Fri, 26 Jan 2018 11:56:59 +0100 Subject: [PATCH] Locator: Do not use object pool for some filters and LocatorManager Also bundle lifetime management into one object. Also minor interfact cleanup. Change-Id: I60eec84b0b28a20ce353fcdbfdff1c4848686ba0 Reviewed-by: Eike Ziller --- src/plugins/coreplugin/coreplugin.cpp | 2 +- src/plugins/coreplugin/locator/locator.cpp | 62 +++++++------------ src/plugins/coreplugin/locator/locator.h | 18 +----- .../coreplugin/locator/locatormanager.cpp | 3 +- .../coreplugin/locator/locatormanager.h | 4 +- .../coreplugin/locator/locatorwidget.h | 2 + 6 files changed, 31 insertions(+), 60 deletions(-) diff --git a/src/plugins/coreplugin/coreplugin.cpp b/src/plugins/coreplugin/coreplugin.cpp index 33f08926e70..ffb5e0cbe3c 100644 --- a/src/plugins/coreplugin/coreplugin.cpp +++ b/src/plugins/coreplugin/coreplugin.cpp @@ -160,7 +160,7 @@ bool CorePlugin::initialize(const QStringList &arguments, QString *errorMessage) SaveFile::initializeUmask(); Find::initialize(); - m_locator->initialize(this, arguments, errorMessage); + m_locator->initialize(); MacroExpander *expander = Utils::globalMacroExpander(); expander->registerVariable("CurrentDate:ISO", tr("The current date (ISO)."), diff --git a/src/plugins/coreplugin/locator/locator.cpp b/src/plugins/coreplugin/locator/locator.cpp index 2f4f53e2eed..e138102b048 100644 --- a/src/plugins/coreplugin/locator/locator.cpp +++ b/src/plugins/coreplugin/locator/locator.cpp @@ -25,6 +25,8 @@ #include "locator.h" +#include "directoryfilter.h" +#include "executefilter.h" #include "externaltoolsfilter.h" #include "filesystemfilter.h" #include "javascriptfilter.h" @@ -58,7 +60,7 @@ #include #include -#ifdef Q_OS_OSX +#ifdef Q_OS_MACOS #include "spotlightlocatorfilter.h" #endif @@ -67,6 +69,22 @@ namespace Internal { static Locator *m_instance = nullptr; +class LocatorData +{ +public: + LocatorManager m_locatorManager; + + JavaScriptFilter m_javaScriptFilter; + OpenDocumentsFilter m_openDocumentsFilter; + FileSystemFilter m_fileSystemFilter; + ExecuteFilter m_executeFilter; + ExternalToolsFilter m_externalToolsFilter; + LocatorFiltersFilter m_locatorsFiltersFilter; +#ifdef Q_OS_MACOS + SpotlightLocatorFilter m_spotlightLocatorFilter; +#endif +}; + Locator::Locator() { m_instance = this; @@ -76,18 +94,8 @@ Locator::Locator() Locator::~Locator() { - m_corePlugin->removeObject(m_javaScriptFilter); - m_corePlugin->removeObject(m_openDocumentsFilter); - m_corePlugin->removeObject(m_fileSystemFilter); - m_corePlugin->removeObject(m_executeFilter); - m_corePlugin->removeObject(m_settingsPage); - m_corePlugin->removeObject(m_externalToolsFilter); - delete m_javaScriptFilter; - delete m_openDocumentsFilter; - delete m_fileSystemFilter; - delete m_executeFilter; delete m_settingsPage; - delete m_externalToolsFilter; + delete m_locatorData; qDeleteAll(m_customFilters); } @@ -96,12 +104,10 @@ Locator *Locator::instance() return m_instance; } -void Locator::initialize(CorePlugin *corePlugin, const QStringList &, QString *) +void Locator::initialize() { - m_corePlugin = corePlugin; - + m_locatorData = new LocatorData; m_settingsPage = new LocatorSettingsPage(this); - m_corePlugin->addObject(m_settingsPage); QAction *action = new QAction(Utils::Icons::ZOOM.icon(), tr("Locate..."), this); Command *cmd = ActionManager::registerAction(action, Constants::LOCATE); @@ -117,28 +123,6 @@ void Locator::initialize(CorePlugin *corePlugin, const QStringList &, QString *) StatusBarManager::addStatusBarWidget(locatorWidget, StatusBarManager::First, Context("LocatorWidget")); - new LocatorManager(this); - - m_javaScriptFilter = new JavaScriptFilter; - m_corePlugin->addObject(m_javaScriptFilter); - - m_openDocumentsFilter = new OpenDocumentsFilter; - m_corePlugin->addObject(m_openDocumentsFilter); - - m_fileSystemFilter = new FileSystemFilter(); - m_corePlugin->addObject(m_fileSystemFilter); - - m_executeFilter = new ExecuteFilter(); - m_corePlugin->addObject(m_executeFilter); - - m_externalToolsFilter = new ExternalToolsFilter; - m_corePlugin->addObject(m_externalToolsFilter); - - m_corePlugin->addAutoReleasedObject(new LocatorFiltersFilter); -#ifdef Q_OS_OSX - m_corePlugin->addAutoReleasedObject(new SpotlightLocatorFilter); -#endif - connect(ICore::instance(), &ICore::saveSettingsRequested, this, &Locator::saveSettings); } @@ -257,7 +241,7 @@ void Locator::updateEditorManagerPlaceholderText() "") .arg(openCommand->keySequence().toString(QKeySequence::NativeText)) .arg(locateCommand->keySequence().toString(QKeySequence::NativeText)) - .arg(m_fileSystemFilter->shortcutString()); + .arg(m_locatorData->m_fileSystemFilter.shortcutString()); QString classes; // not nice, but anyhow diff --git a/src/plugins/coreplugin/locator/locator.h b/src/plugins/coreplugin/locator/locator.h index 5d5d379a887..25627a339a6 100644 --- a/src/plugins/coreplugin/locator/locator.h +++ b/src/plugins/coreplugin/locator/locator.h @@ -26,25 +26,18 @@ #pragma once #include "ilocatorfilter.h" -#include "directoryfilter.h" -#include "executefilter.h" #include "locatorconstants.h" #include -#include #include #include namespace Core { namespace Internal { -class CorePlugin; -class OpenDocumentsFilter; -class FileSystemFilter; -class JavaScriptFilter; +class LocatorData; class LocatorSettingsPage; -class ExternalToolsFilter; class Locator : public QObject { @@ -56,7 +49,7 @@ public: static Locator *instance(); - void initialize(CorePlugin *corePlugin, const QStringList &arguments, QString *errorMessage); + void initialize(); void extensionsInitialized(); bool delayedInitialize(); @@ -80,18 +73,13 @@ private: void updateEditorManagerPlaceholderText(); LocatorSettingsPage *m_settingsPage = nullptr; + LocatorData *m_locatorData = nullptr; bool m_settingsInitialized = false; QList m_filters; QList m_customFilters; QMap m_filterActionMap; QTimer m_refreshTimer; - JavaScriptFilter *m_javaScriptFilter = nullptr; - OpenDocumentsFilter *m_openDocumentsFilter = nullptr; - FileSystemFilter *m_fileSystemFilter = nullptr; - ExecuteFilter *m_executeFilter = nullptr; - CorePlugin *m_corePlugin = nullptr; - ExternalToolsFilter *m_externalToolsFilter = nullptr; }; } // namespace Internal diff --git a/src/plugins/coreplugin/locator/locatormanager.cpp b/src/plugins/coreplugin/locator/locatormanager.cpp index 6d9d252650f..01c43b261ab 100644 --- a/src/plugins/coreplugin/locator/locatormanager.cpp +++ b/src/plugins/coreplugin/locator/locatormanager.cpp @@ -38,8 +38,7 @@ using namespace Core::Internal; namespace Core { -LocatorManager::LocatorManager(QObject *parent) - : QObject(parent) +LocatorManager::LocatorManager() { } diff --git a/src/plugins/coreplugin/locator/locatormanager.h b/src/plugins/coreplugin/locator/locatormanager.h index 54fde0d4b75..ffc7493cd07 100644 --- a/src/plugins/coreplugin/locator/locatormanager.h +++ b/src/plugins/coreplugin/locator/locatormanager.h @@ -33,14 +33,12 @@ namespace Core { class ILocatorFilter; -namespace Internal { class LocatorWidget; } - class CORE_EXPORT LocatorManager : public QObject { Q_OBJECT public: - LocatorManager(QObject *parent = nullptr); + LocatorManager(); static void showFilter(ILocatorFilter *filter); static void show(const QString &text, int selectionStart = -1, int selectionLength = 0); diff --git a/src/plugins/coreplugin/locator/locatorwidget.h b/src/plugins/coreplugin/locator/locatorwidget.h index c11b8df37c8..59805a76e25 100644 --- a/src/plugins/coreplugin/locator/locatorwidget.h +++ b/src/plugins/coreplugin/locator/locatorwidget.h @@ -29,10 +29,12 @@ #include +#include #include #include QT_BEGIN_NAMESPACE +class QAbstractItemModel; class QAction; class QMenu; QT_END_NAMESPACE