From 1ab065add3f8812af1b007e300eaeab8aaf60362 Mon Sep 17 00:00:00 2001
From: Tobias Hunger <tobias.hunger@digia.com>
Date: Fri, 2 Aug 2013 12:33:17 +0200
Subject: [PATCH] Macros: Clean up singleton APIs

Task-number: QTCREATORBUG-9763

Change-Id: I76c4d60279f738272b0cf5fda651ce266f798c2c
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
---
 src/plugins/macros/macrolocatorfilter.cpp |  2 +-
 src/plugins/macros/macromanager.cpp       | 10 +++++-----
 src/plugins/macros/macromanager.h         | 17 ++++++++++-------
 src/plugins/macros/macrooptionswidget.cpp |  4 ++--
 src/plugins/macros/macrosplugin.cpp       |  1 +
 5 files changed, 19 insertions(+), 15 deletions(-)

diff --git a/src/plugins/macros/macrolocatorfilter.cpp b/src/plugins/macros/macrolocatorfilter.cpp
index 2d4d72386fb..03df032dc6d 100644
--- a/src/plugins/macros/macrolocatorfilter.cpp
+++ b/src/plugins/macros/macrolocatorfilter.cpp
@@ -57,7 +57,7 @@ QList<Locator::FilterEntry> MacroLocatorFilter::matchesFor(QFutureInterface<Loca
     Q_UNUSED(future)
     QList<Locator::FilterEntry> result;
 
-    const QMap<QString, Macro*> &macros = MacroManager::instance()->macros();
+    const QMap<QString, Macro*> &macros = MacroManager::macros();
     QMapIterator<QString, Macro*> it(macros);
 
     while (it.hasNext()) {
diff --git a/src/plugins/macros/macromanager.cpp b/src/plugins/macros/macromanager.cpp
index 002a12427d8..cafcc25791f 100644
--- a/src/plugins/macros/macromanager.cpp
+++ b/src/plugins/macros/macromanager.cpp
@@ -253,10 +253,10 @@ MacroManager::MacroManager(QObject *parent) :
     QObject(parent),
     d(new MacroManagerPrivate(this))
 {
+    m_instance = this;
     registerMacroHandler(d->actionHandler);
     registerMacroHandler(d->findHandler);
     registerMacroHandler(d->textEditorHandler);
-    m_instance = this;
 }
 
 MacroManager::~MacroManager()
@@ -360,14 +360,14 @@ void MacroManager::deleteMacro(const QString &name)
     }
 }
 
-const QMap<QString,Macro*> &MacroManager::macros() const
+const QMap<QString,Macro*> &MacroManager::macros()
 {
-    return d->macros;
+    return m_instance->d->macros;
 }
 
 void MacroManager::registerMacroHandler(IMacroHandler *handler)
 {
-    d->handlers.prepend(handler);
+    m_instance->d->handlers.prepend(handler);
 }
 
 MacroManager *MacroManager::instance()
@@ -392,7 +392,7 @@ void Macros::MacroManager::saveLastMacro()
         d->showSaveDialog();
 }
 
-QString Macros::MacroManager::macrosDirectory() const
+QString Macros::MacroManager::macrosDirectory()
 {
     const QString &path =
         Core::ICore::userResourcePath() + QLatin1String("/macros");
diff --git a/src/plugins/macros/macromanager.h b/src/plugins/macros/macromanager.h
index 045d140bc53..ad2d33d3d4b 100644
--- a/src/plugins/macros/macromanager.h
+++ b/src/plugins/macros/macromanager.h
@@ -45,23 +45,21 @@ class Macro;
 class IMacroHandler;
 
 namespace Internal {
-    class MacroOptionsWidget;
+class MacroOptionsWidget;
+class MacrosPlugin;
 }
 
 class MACROS_EXPORT MacroManager : public QObject
 {
     Q_OBJECT
 public:
-    explicit MacroManager(QObject *parent = 0);
-    ~MacroManager();
-
     static MacroManager *instance();
 
-    const QMap<QString, Macro *> &macros() const;
+    static const QMap<QString, Macro *> &macros();
 
-    void registerMacroHandler(IMacroHandler *handler);
+    static void registerMacroHandler(IMacroHandler *handler);
 
-    QString macrosDirectory() const;
+    static QString macrosDirectory();
 
 public slots:
     void startMacro();
@@ -77,10 +75,15 @@ protected:
     void changeMacro(const QString &name, const QString &description);
 
 private:
+    explicit MacroManager(QObject *parent = 0);
+    ~MacroManager();
+
     static MacroManager *m_instance;
 
     class MacroManagerPrivate;
     MacroManagerPrivate* d;
+
+    friend class Internal::MacrosPlugin;
 };
 
 } // namespace Macros
diff --git a/src/plugins/macros/macrooptionswidget.cpp b/src/plugins/macros/macrooptionswidget.cpp
index fede998dfaf..dfe386d3064 100644
--- a/src/plugins/macros/macrooptionswidget.cpp
+++ b/src/plugins/macros/macrooptionswidget.cpp
@@ -97,9 +97,9 @@ void MacroOptionsWidget::initialize()
 
 void MacroOptionsWidget::createTable()
 {
-    QDir dir(MacroManager::instance()->macrosDirectory());
+    QDir dir(MacroManager::macrosDirectory());
     const Core::Id base = Core::Id(Constants::PREFIX_MACRO);
-    QMapIterator<QString, Macro *> it(MacroManager::instance()->macros());
+    QMapIterator<QString, Macro *> it(MacroManager::macros());
     while (it.hasNext()) {
         it.next();
         QFileInfo fileInfo(it.value()->fileName());
diff --git a/src/plugins/macros/macrosplugin.cpp b/src/plugins/macros/macrosplugin.cpp
index b31aa2f5594..fe34ddf4d00 100644
--- a/src/plugins/macros/macrosplugin.cpp
+++ b/src/plugins/macros/macrosplugin.cpp
@@ -59,6 +59,7 @@ MacrosPlugin::MacrosPlugin()
 
 MacrosPlugin::~MacrosPlugin()
 {
+    delete m_macroManager;
 }
 
 bool MacrosPlugin::initialize(const QStringList &arguments, QString *errorMessage)
-- 
GitLab