forked from qt-creator/qt-creator
fix leaks of singletons
Merge-request: 265 Reviewed-by: hjk <qtc-committer@nokia.com>
This commit is contained in:
@@ -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);
|
||||
|
@@ -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)
|
||||
|
@@ -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");
|
||||
|
@@ -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;
|
||||
|
||||
|
@@ -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()
|
||||
{
|
||||
}
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -49,7 +49,8 @@ static const QLatin1String groupC("Analyzer");
|
||||
|
||||
static const QLatin1String valgrindExeC("Analyzer.Valgrind.ValgrindExecutable");
|
||||
|
||||
ValgrindSettings::ValgrindSettings()
|
||||
ValgrindSettings::ValgrindSettings(QObject *parent)
|
||||
: AbstractAnalyzerSubConfig(parent)
|
||||
{
|
||||
}
|
||||
|
||||
|
@@ -53,7 +53,7 @@ class VALGRINDTOOLBASE_EXPORT ValgrindSettings : public AbstractAnalyzerSubConfi
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
ValgrindSettings();
|
||||
ValgrindSettings(QObject *parent);
|
||||
virtual ~ValgrindSettings();
|
||||
|
||||
virtual QVariantMap toMap() const;
|
||||
|
Reference in New Issue
Block a user