fix leaks of singletons

Merge-request: 265
Reviewed-by: hjk <qtc-committer@nokia.com>
This commit is contained in:
Milian Wolff
2011-03-04 16:00:01 +01:00
committed by hjk
parent 8f5e33cfc0
commit 1e3d1982ca
8 changed files with 59 additions and 27 deletions

View File

@@ -140,11 +140,16 @@ public:
Utils::StyledSeparator *m_toolBoxSeparator;
ActionContainer *m_viewsMenu;
typedef QPair<Qt::DockWidgetArea, QDockWidget*> ToolWidgetPair;
QMap<IAnalyzerTool*, QList<ToolWidgetPair> > m_toolWidgets;
typedef QList<ToolWidgetPair> ToolWidgetPairList;
QMap<IAnalyzerTool*, ToolWidgetPairList> m_toolWidgets;
DockWidgetEventFilter *m_resizeEventFilter;
QMap<IAnalyzerTool*, QWidget*> m_toolToolbarWidgets;
QStackedWidget *m_toolbarStackedWidget;
QMap<IAnalyzerTool *, QSettings *> m_defaultSettings;
// list of dock widgets to prevent memory leak
typedef QWeakPointer<QDockWidget> DockPtr;
QList<DockPtr> m_dockWidgets;
};
AnalyzerManager::AnalyzerManagerPrivate::AnalyzerManagerPrivate(AnalyzerManager *qq):
@@ -177,6 +182,12 @@ AnalyzerManager::AnalyzerManagerPrivate::AnalyzerManagerPrivate(AnalyzerManager
AnalyzerManager::AnalyzerManagerPrivate::~AnalyzerManagerPrivate()
{
// as we have to setParent(0) on dock widget that are not selected,
// we keep track of all and make sure we don't leak any
foreach(const DockPtr &ptr, m_dockWidgets) {
if (ptr)
delete ptr.data();
}
}
void AnalyzerManager::AnalyzerManagerPrivate::setupActions()
@@ -561,6 +572,7 @@ QDockWidget *AnalyzerManager::createDockWidget(IAnalyzerTool *tool, const QStrin
QTC_ASSERT(!widget->objectName().isEmpty(), qt_noop());
QDockWidget *dockWidget = d->m_mainWindow->addDockForWidget(widget);
d->m_dockWidgets << AnalyzerManagerPrivate::DockPtr(dockWidget);
dockWidget->setWindowTitle(title);
d->m_toolWidgets[tool] << qMakePair(area, dockWidget);

View File

@@ -76,7 +76,7 @@ void AnalyzerPlugin::AnalyzerPluginPrivate::initialize(const QStringList &argume
{
Q_UNUSED(arguments)
Q_UNUSED(errorString)
m_manager = new AnalyzerManager;
m_manager = new AnalyzerManager(q);
}
@@ -92,6 +92,7 @@ AnalyzerPlugin::~AnalyzerPlugin()
// Unregister objects from the plugin manager's object pool
// Delete members
delete d;
m_instance = 0;
}
bool AnalyzerPlugin::initialize(const QStringList &arguments, QString *errorString)

View File

@@ -53,7 +53,8 @@ static const QLatin1String groupC("Analyzer");
AnalyzerGlobalSettings *AnalyzerGlobalSettings::m_instance = 0;
AbstractAnalyzerSubConfig::AbstractAnalyzerSubConfig()
AbstractAnalyzerSubConfig::AbstractAnalyzerSubConfig(QObject *parent)
: QObject(parent)
{
}
@@ -62,7 +63,8 @@ AbstractAnalyzerSubConfig::~AbstractAnalyzerSubConfig()
{
}
AnalyzerSettings::AnalyzerSettings()
AnalyzerSettings::AnalyzerSettings(QObject *parent)
: QObject(parent)
{
}
@@ -97,7 +99,8 @@ QVariantMap AnalyzerSettings::toMap() const
return map;
}
AnalyzerGlobalSettings::AnalyzerGlobalSettings()
AnalyzerGlobalSettings::AnalyzerGlobalSettings(QObject *parent)
: AnalyzerSettings(parent)
{
QTC_ASSERT(!m_instance, return);
m_instance = this;
@@ -106,7 +109,8 @@ AnalyzerGlobalSettings::AnalyzerGlobalSettings()
AnalyzerGlobalSettings *AnalyzerGlobalSettings::instance()
{
if (!m_instance)
m_instance = new AnalyzerGlobalSettings;
m_instance = new AnalyzerGlobalSettings(AnalyzerPlugin::instance());
return m_instance;
}
@@ -147,7 +151,7 @@ void AnalyzerGlobalSettings::registerSubConfigFactory(AbstractAnalyzerSubConfigF
{
m_subConfigFactories << factory;
AbstractAnalyzerSubConfig *config = factory->createGlobalSubConfig();
AbstractAnalyzerSubConfig *config = factory->createGlobalSubConfig(this);
addSubConfig(config);
AnalyzerPlugin::instance()->addAutoReleasedObject(new AnalyzerOptionsPage(config));
@@ -159,11 +163,12 @@ QList<AbstractAnalyzerSubConfigFactory *> AnalyzerGlobalSettings::subConfigFacto
return m_subConfigFactories;
}
AnalyzerProjectSettings::AnalyzerProjectSettings()
AnalyzerProjectSettings::AnalyzerProjectSettings(QObject *parent)
: AnalyzerSettings(parent)
{
// add sub configs
foreach(AbstractAnalyzerSubConfigFactory *factory, AnalyzerGlobalSettings::instance()->subConfigFactories()) {
addSubConfig(factory->createProjectSubConfig());
addSubConfig(factory->createProjectSubConfig(parent));
}
// take defaults from global settings
@@ -171,6 +176,10 @@ AnalyzerProjectSettings::AnalyzerProjectSettings()
fromMap(gs->toMap());
}
AnalyzerProjectSettings::~AnalyzerProjectSettings()
{
}
QString AnalyzerProjectSettings::displayName() const
{
return tr("Analyzer Settings");

View File

@@ -64,7 +64,7 @@ class ANALYZER_EXPORT AbstractAnalyzerSubConfig : public QObject
{
Q_OBJECT
public:
AbstractAnalyzerSubConfig();
AbstractAnalyzerSubConfig(QObject *parent);
virtual ~AbstractAnalyzerSubConfig();
virtual QVariantMap defaults() const = 0;
@@ -86,8 +86,8 @@ public:
AbstractAnalyzerSubConfigFactory(){}
~AbstractAnalyzerSubConfigFactory(){}
virtual AbstractAnalyzerSubConfig *createGlobalSubConfig() = 0;
virtual AbstractAnalyzerSubConfig *createProjectSubConfig() = 0;
virtual AbstractAnalyzerSubConfig *createGlobalSubConfig(QObject *parent) = 0;
virtual AbstractAnalyzerSubConfig *createProjectSubConfig(QObject *parent) = 0;
};
/**
@@ -103,14 +103,14 @@ class ANALYZER_EXPORT AnalyzerSubConfigFactory : public AbstractAnalyzerSubConfi
public:
AnalyzerSubConfigFactory(){}
AbstractAnalyzerSubConfig *createGlobalSubConfig()
AbstractAnalyzerSubConfig *createGlobalSubConfig(QObject *parent)
{
return new GlobalConfigT;
return new GlobalConfigT(parent);
}
AbstractAnalyzerSubConfig *createProjectSubConfig()
AbstractAnalyzerSubConfig *createProjectSubConfig(QObject *parent)
{
return new ProjectConfigT;
return new ProjectConfigT(parent);
}
};
@@ -147,7 +147,7 @@ protected:
virtual bool fromMap(const QVariantMap &map);
AnalyzerSettings();
AnalyzerSettings(QObject *parent);
};
@@ -170,7 +170,7 @@ public:
QList<AbstractAnalyzerSubConfigFactory *> subConfigFactories() const;
private:
AnalyzerGlobalSettings();
AnalyzerGlobalSettings(QObject *parent);
static AnalyzerGlobalSettings *m_instance;
QList<AbstractAnalyzerSubConfigFactory *> m_subConfigFactories;
};
@@ -182,7 +182,8 @@ class ANALYZER_EXPORT AnalyzerProjectSettings : public AnalyzerSettings, public
{
Q_OBJECT
public:
AnalyzerProjectSettings();
AnalyzerProjectSettings(QObject *parent = 0);
virtual ~AnalyzerProjectSettings();
QString displayName() const;

View File

@@ -51,7 +51,8 @@ static const QLatin1String addedSuppressionFilesC("Analyzer.Valgrind.AddedSupres
static const QLatin1String filterExternalIssuesC("Analyzer.Valgrind.FilterExternalIssues");
static const QLatin1String visibleErrorKindsC("Analyzer.Valgrind.VisibleErrorKinds");
AbstractMemcheckSettings::AbstractMemcheckSettings()
AbstractMemcheckSettings::AbstractMemcheckSettings(QObject *parent)
: AbstractAnalyzerSubConfig(parent)
{
}
@@ -154,7 +155,8 @@ QWidget* AbstractMemcheckSettings::createConfigWidget(QWidget *parent)
return new MemcheckConfigWidget(this, parent);
}
MemcheckGlobalSettings::MemcheckGlobalSettings()
MemcheckGlobalSettings::MemcheckGlobalSettings(QObject *parent)
: AbstractMemcheckSettings(parent)
{
}
@@ -201,7 +203,12 @@ MemcheckGlobalSettings *globalMemcheckSettings()
return ret;
}
MemcheckProjectSettings::MemcheckProjectSettings()
MemcheckProjectSettings::MemcheckProjectSettings(QObject *parent)
: AbstractMemcheckSettings(parent)
{
}
MemcheckProjectSettings::~MemcheckProjectSettings()
{
}

View File

@@ -48,7 +48,7 @@ class AbstractMemcheckSettings : public AbstractAnalyzerSubConfig
{
Q_OBJECT
public:
AbstractMemcheckSettings();
AbstractMemcheckSettings(QObject *parent);
virtual ~AbstractMemcheckSettings();
virtual bool fromMap(const QVariantMap &map);
@@ -98,7 +98,7 @@ class MemcheckGlobalSettings : public AbstractMemcheckSettings
{
Q_OBJECT
public:
MemcheckGlobalSettings();
MemcheckGlobalSettings(QObject *parent);
virtual ~MemcheckGlobalSettings();
QStringList suppressionFiles() const;
@@ -122,7 +122,8 @@ class MemcheckProjectSettings : public AbstractMemcheckSettings
{
Q_OBJECT
public:
MemcheckProjectSettings();
MemcheckProjectSettings(QObject *parent);
virtual ~MemcheckProjectSettings();
QStringList suppressionFiles() const;
// in the project-specific settings we store a diff to the global list

View File

@@ -49,7 +49,8 @@ static const QLatin1String groupC("Analyzer");
static const QLatin1String valgrindExeC("Analyzer.Valgrind.ValgrindExecutable");
ValgrindSettings::ValgrindSettings()
ValgrindSettings::ValgrindSettings(QObject *parent)
: AbstractAnalyzerSubConfig(parent)
{
}

View File

@@ -53,7 +53,7 @@ class VALGRINDTOOLBASE_EXPORT ValgrindSettings : public AbstractAnalyzerSubConfi
{
Q_OBJECT
public:
ValgrindSettings();
ValgrindSettings(QObject *parent);
virtual ~ValgrindSettings();
virtual QVariantMap toMap() const;