Disconnect parent from all signals when detaching from parent

This commit is contained in:
Gaute Lindkvist 2020-09-16 08:47:57 +02:00
parent d3152f5030
commit 15ae290f1d
3 changed files with 21 additions and 3 deletions

View File

@ -66,9 +66,25 @@ void PdmObjectHandle::removeAsParentField( PdmFieldHandle* parentField )
{
CAF_ASSERT( m_parentField == parentField );
if ( parentField ) disconnectObserverFromAllSignals( parentField->ownerObject() );
m_parentField = nullptr;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void PdmObjectHandle::disconnectObserverFromAllSignals( SignalObserver* observer )
{
if ( observer )
{
for ( auto emittedSignal : emittedSignals() )
{
emittedSignal->disconnect( observer );
}
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@ -117,8 +117,10 @@ private:
std::vector<std::pair<PdmObjectCapability*, bool>> m_capabilities;
// Child/Parent Relationships
void setAsParentField( PdmFieldHandle* parentField );
void removeAsParentField( PdmFieldHandle* parentField );
void setAsParentField( PdmFieldHandle* parentField );
void removeAsParentField( PdmFieldHandle* parentField );
void disconnectObserverFromAllSignals( SignalObserver* observer );
PdmFieldHandle* m_parentField;
// PtrReferences

View File

@ -67,7 +67,7 @@ public:
std::list<AbstractSignal*> emittedSignals() const;
private:
std::list<AbstractSignal*> m_signals;
mutable std::list<AbstractSignal*> m_signals;
};
//==================================================================================================