Utils: Allow more finegrained subaspect ownership in AspectContainer

Currently this luckily conincides with the register/addAspect schism
but that's not necessarily true in the future.

Change-Id: I05a59d74182dbdf81193ebd790d6f9bab2d30439
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
hjk
2023-05-24 10:49:48 +02:00
parent 3541b692f5
commit 320064f431
5 changed files with 8 additions and 19 deletions

View File

@@ -2399,9 +2399,9 @@ namespace Internal {
class AspectContainerPrivate
{
public:
QList<BaseAspect *> m_items; // Not owned
QList<BaseAspect *> m_items; // Both owned and non-owned.
QList<BaseAspect *> m_ownedItems; // Owned only.
bool m_autoApply = true;
bool m_ownsSubAspects = false;
QStringList m_settingsGroup;
};
@@ -2416,17 +2416,18 @@ AspectContainer::AspectContainer(QObject *parent)
*/
AspectContainer::~AspectContainer()
{
if (d->m_ownsSubAspects)
qDeleteAll(d->m_items);
qDeleteAll(d->m_ownedItems);
}
/*!
\internal
*/
void AspectContainer::registerAspect(BaseAspect *aspect)
void AspectContainer::registerAspect(BaseAspect *aspect, bool takeOwnership)
{
aspect->setAutoApply(d->m_autoApply);
d->m_items.append(aspect);
if (takeOwnership)
d->m_ownedItems.append(aspect);
}
void AspectContainer::registerAspects(const AspectContainer &aspects)
@@ -2547,11 +2548,6 @@ void AspectContainer::setAutoApply(bool on)
aspect->setAutoApply(on);
}
void AspectContainer::setOwnsSubAspects(bool on)
{
d->m_ownsSubAspects = on;
}
bool AspectContainer::isDirty() const
{
for (BaseAspect *aspect : std::as_const(d->m_items)) {