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;
|
Utils::StyledSeparator *m_toolBoxSeparator;
|
||||||
ActionContainer *m_viewsMenu;
|
ActionContainer *m_viewsMenu;
|
||||||
typedef QPair<Qt::DockWidgetArea, QDockWidget*> ToolWidgetPair;
|
typedef QPair<Qt::DockWidgetArea, QDockWidget*> ToolWidgetPair;
|
||||||
QMap<IAnalyzerTool*, QList<ToolWidgetPair> > m_toolWidgets;
|
typedef QList<ToolWidgetPair> ToolWidgetPairList;
|
||||||
|
QMap<IAnalyzerTool*, ToolWidgetPairList> m_toolWidgets;
|
||||||
DockWidgetEventFilter *m_resizeEventFilter;
|
DockWidgetEventFilter *m_resizeEventFilter;
|
||||||
QMap<IAnalyzerTool*, QWidget*> m_toolToolbarWidgets;
|
QMap<IAnalyzerTool*, QWidget*> m_toolToolbarWidgets;
|
||||||
QStackedWidget *m_toolbarStackedWidget;
|
QStackedWidget *m_toolbarStackedWidget;
|
||||||
QMap<IAnalyzerTool *, QSettings *> m_defaultSettings;
|
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):
|
AnalyzerManager::AnalyzerManagerPrivate::AnalyzerManagerPrivate(AnalyzerManager *qq):
|
||||||
@@ -177,6 +182,12 @@ AnalyzerManager::AnalyzerManagerPrivate::AnalyzerManagerPrivate(AnalyzerManager
|
|||||||
|
|
||||||
AnalyzerManager::AnalyzerManagerPrivate::~AnalyzerManagerPrivate()
|
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()
|
void AnalyzerManager::AnalyzerManagerPrivate::setupActions()
|
||||||
@@ -561,6 +572,7 @@ QDockWidget *AnalyzerManager::createDockWidget(IAnalyzerTool *tool, const QStrin
|
|||||||
QTC_ASSERT(!widget->objectName().isEmpty(), qt_noop());
|
QTC_ASSERT(!widget->objectName().isEmpty(), qt_noop());
|
||||||
|
|
||||||
QDockWidget *dockWidget = d->m_mainWindow->addDockForWidget(widget);
|
QDockWidget *dockWidget = d->m_mainWindow->addDockForWidget(widget);
|
||||||
|
d->m_dockWidgets << AnalyzerManagerPrivate::DockPtr(dockWidget);
|
||||||
dockWidget->setWindowTitle(title);
|
dockWidget->setWindowTitle(title);
|
||||||
|
|
||||||
d->m_toolWidgets[tool] << qMakePair(area, dockWidget);
|
d->m_toolWidgets[tool] << qMakePair(area, dockWidget);
|
||||||
|
@@ -76,7 +76,7 @@ void AnalyzerPlugin::AnalyzerPluginPrivate::initialize(const QStringList &argume
|
|||||||
{
|
{
|
||||||
Q_UNUSED(arguments)
|
Q_UNUSED(arguments)
|
||||||
Q_UNUSED(errorString)
|
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
|
// Unregister objects from the plugin manager's object pool
|
||||||
// Delete members
|
// Delete members
|
||||||
delete d;
|
delete d;
|
||||||
|
m_instance = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AnalyzerPlugin::initialize(const QStringList &arguments, QString *errorString)
|
bool AnalyzerPlugin::initialize(const QStringList &arguments, QString *errorString)
|
||||||
|
@@ -53,7 +53,8 @@ static const QLatin1String groupC("Analyzer");
|
|||||||
|
|
||||||
AnalyzerGlobalSettings *AnalyzerGlobalSettings::m_instance = 0;
|
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;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
AnalyzerGlobalSettings::AnalyzerGlobalSettings()
|
AnalyzerGlobalSettings::AnalyzerGlobalSettings(QObject *parent)
|
||||||
|
: AnalyzerSettings(parent)
|
||||||
{
|
{
|
||||||
QTC_ASSERT(!m_instance, return);
|
QTC_ASSERT(!m_instance, return);
|
||||||
m_instance = this;
|
m_instance = this;
|
||||||
@@ -106,7 +109,8 @@ AnalyzerGlobalSettings::AnalyzerGlobalSettings()
|
|||||||
AnalyzerGlobalSettings *AnalyzerGlobalSettings::instance()
|
AnalyzerGlobalSettings *AnalyzerGlobalSettings::instance()
|
||||||
{
|
{
|
||||||
if (!m_instance)
|
if (!m_instance)
|
||||||
m_instance = new AnalyzerGlobalSettings;
|
m_instance = new AnalyzerGlobalSettings(AnalyzerPlugin::instance());
|
||||||
|
|
||||||
return m_instance;
|
return m_instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -147,7 +151,7 @@ void AnalyzerGlobalSettings::registerSubConfigFactory(AbstractAnalyzerSubConfigF
|
|||||||
{
|
{
|
||||||
m_subConfigFactories << factory;
|
m_subConfigFactories << factory;
|
||||||
|
|
||||||
AbstractAnalyzerSubConfig *config = factory->createGlobalSubConfig();
|
AbstractAnalyzerSubConfig *config = factory->createGlobalSubConfig(this);
|
||||||
addSubConfig(config);
|
addSubConfig(config);
|
||||||
AnalyzerPlugin::instance()->addAutoReleasedObject(new AnalyzerOptionsPage(config));
|
AnalyzerPlugin::instance()->addAutoReleasedObject(new AnalyzerOptionsPage(config));
|
||||||
|
|
||||||
@@ -159,11 +163,12 @@ QList<AbstractAnalyzerSubConfigFactory *> AnalyzerGlobalSettings::subConfigFacto
|
|||||||
return m_subConfigFactories;
|
return m_subConfigFactories;
|
||||||
}
|
}
|
||||||
|
|
||||||
AnalyzerProjectSettings::AnalyzerProjectSettings()
|
AnalyzerProjectSettings::AnalyzerProjectSettings(QObject *parent)
|
||||||
|
: AnalyzerSettings(parent)
|
||||||
{
|
{
|
||||||
// add sub configs
|
// add sub configs
|
||||||
foreach(AbstractAnalyzerSubConfigFactory *factory, AnalyzerGlobalSettings::instance()->subConfigFactories()) {
|
foreach(AbstractAnalyzerSubConfigFactory *factory, AnalyzerGlobalSettings::instance()->subConfigFactories()) {
|
||||||
addSubConfig(factory->createProjectSubConfig());
|
addSubConfig(factory->createProjectSubConfig(parent));
|
||||||
}
|
}
|
||||||
|
|
||||||
// take defaults from global settings
|
// take defaults from global settings
|
||||||
@@ -171,6 +176,10 @@ AnalyzerProjectSettings::AnalyzerProjectSettings()
|
|||||||
fromMap(gs->toMap());
|
fromMap(gs->toMap());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AnalyzerProjectSettings::~AnalyzerProjectSettings()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
QString AnalyzerProjectSettings::displayName() const
|
QString AnalyzerProjectSettings::displayName() const
|
||||||
{
|
{
|
||||||
return tr("Analyzer Settings");
|
return tr("Analyzer Settings");
|
||||||
|
@@ -64,7 +64,7 @@ class ANALYZER_EXPORT AbstractAnalyzerSubConfig : public QObject
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
AbstractAnalyzerSubConfig();
|
AbstractAnalyzerSubConfig(QObject *parent);
|
||||||
virtual ~AbstractAnalyzerSubConfig();
|
virtual ~AbstractAnalyzerSubConfig();
|
||||||
|
|
||||||
virtual QVariantMap defaults() const = 0;
|
virtual QVariantMap defaults() const = 0;
|
||||||
@@ -86,8 +86,8 @@ public:
|
|||||||
AbstractAnalyzerSubConfigFactory(){}
|
AbstractAnalyzerSubConfigFactory(){}
|
||||||
~AbstractAnalyzerSubConfigFactory(){}
|
~AbstractAnalyzerSubConfigFactory(){}
|
||||||
|
|
||||||
virtual AbstractAnalyzerSubConfig *createGlobalSubConfig() = 0;
|
virtual AbstractAnalyzerSubConfig *createGlobalSubConfig(QObject *parent) = 0;
|
||||||
virtual AbstractAnalyzerSubConfig *createProjectSubConfig() = 0;
|
virtual AbstractAnalyzerSubConfig *createProjectSubConfig(QObject *parent) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -103,14 +103,14 @@ class ANALYZER_EXPORT AnalyzerSubConfigFactory : public AbstractAnalyzerSubConfi
|
|||||||
public:
|
public:
|
||||||
AnalyzerSubConfigFactory(){}
|
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);
|
virtual bool fromMap(const QVariantMap &map);
|
||||||
|
|
||||||
AnalyzerSettings();
|
AnalyzerSettings(QObject *parent);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -170,7 +170,7 @@ public:
|
|||||||
QList<AbstractAnalyzerSubConfigFactory *> subConfigFactories() const;
|
QList<AbstractAnalyzerSubConfigFactory *> subConfigFactories() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
AnalyzerGlobalSettings();
|
AnalyzerGlobalSettings(QObject *parent);
|
||||||
static AnalyzerGlobalSettings *m_instance;
|
static AnalyzerGlobalSettings *m_instance;
|
||||||
QList<AbstractAnalyzerSubConfigFactory *> m_subConfigFactories;
|
QList<AbstractAnalyzerSubConfigFactory *> m_subConfigFactories;
|
||||||
};
|
};
|
||||||
@@ -182,7 +182,8 @@ class ANALYZER_EXPORT AnalyzerProjectSettings : public AnalyzerSettings, public
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
AnalyzerProjectSettings();
|
AnalyzerProjectSettings(QObject *parent = 0);
|
||||||
|
virtual ~AnalyzerProjectSettings();
|
||||||
|
|
||||||
QString displayName() const;
|
QString displayName() const;
|
||||||
|
|
||||||
|
@@ -51,7 +51,8 @@ static const QLatin1String addedSuppressionFilesC("Analyzer.Valgrind.AddedSupres
|
|||||||
static const QLatin1String filterExternalIssuesC("Analyzer.Valgrind.FilterExternalIssues");
|
static const QLatin1String filterExternalIssuesC("Analyzer.Valgrind.FilterExternalIssues");
|
||||||
static const QLatin1String visibleErrorKindsC("Analyzer.Valgrind.VisibleErrorKinds");
|
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);
|
return new MemcheckConfigWidget(this, parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
MemcheckGlobalSettings::MemcheckGlobalSettings()
|
MemcheckGlobalSettings::MemcheckGlobalSettings(QObject *parent)
|
||||||
|
: AbstractMemcheckSettings(parent)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -201,7 +203,12 @@ MemcheckGlobalSettings *globalMemcheckSettings()
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
MemcheckProjectSettings::MemcheckProjectSettings()
|
MemcheckProjectSettings::MemcheckProjectSettings(QObject *parent)
|
||||||
|
: AbstractMemcheckSettings(parent)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
MemcheckProjectSettings::~MemcheckProjectSettings()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -48,7 +48,7 @@ class AbstractMemcheckSettings : public AbstractAnalyzerSubConfig
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
AbstractMemcheckSettings();
|
AbstractMemcheckSettings(QObject *parent);
|
||||||
virtual ~AbstractMemcheckSettings();
|
virtual ~AbstractMemcheckSettings();
|
||||||
|
|
||||||
virtual bool fromMap(const QVariantMap &map);
|
virtual bool fromMap(const QVariantMap &map);
|
||||||
@@ -98,7 +98,7 @@ class MemcheckGlobalSettings : public AbstractMemcheckSettings
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
MemcheckGlobalSettings();
|
MemcheckGlobalSettings(QObject *parent);
|
||||||
virtual ~MemcheckGlobalSettings();
|
virtual ~MemcheckGlobalSettings();
|
||||||
|
|
||||||
QStringList suppressionFiles() const;
|
QStringList suppressionFiles() const;
|
||||||
@@ -122,7 +122,8 @@ class MemcheckProjectSettings : public AbstractMemcheckSettings
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
MemcheckProjectSettings();
|
MemcheckProjectSettings(QObject *parent);
|
||||||
|
virtual ~MemcheckProjectSettings();
|
||||||
|
|
||||||
QStringList suppressionFiles() const;
|
QStringList suppressionFiles() const;
|
||||||
// in the project-specific settings we store a diff to the global list
|
// 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");
|
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
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
ValgrindSettings();
|
ValgrindSettings(QObject *parent);
|
||||||
virtual ~ValgrindSettings();
|
virtual ~ValgrindSettings();
|
||||||
|
|
||||||
virtual QVariantMap toMap() const;
|
virtual QVariantMap toMap() const;
|
||||||
|
Reference in New Issue
Block a user