Fix crash when dockindock example is closed. Due to code in dockindock supposed to fix memory leaks: now leaks were fixed in CDockManager (https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/issues/307), the code from dockindock ends up deleting objects already deleted by parent.

This commit is contained in:
Jean Porcherot 2021-04-27 10:05:07 +02:00
parent f54e4c8ac2
commit d0c100995e

View File

@ -15,31 +15,6 @@ using namespace QtAdsUtl;
///////////////////////////////////// /////////////////////////////////////
// DockInDockManager // DockInDockManager
///////////////////////////////////// /////////////////////////////////////
void deleteAllChildrenToPreventLeak( ads::CDockContainerWidget* areaWidget )
{
// fix leaks: https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/issues/307
std::vector<ads::CDockAreaWidget*> areas;
for ( int i = 0; i != areaWidget->dockAreaCount(); ++i )
{
areas.push_back( areaWidget->dockArea(i) );
}
std::vector<std::string> deleted;
for ( auto area : areas )
{
for ( auto widget : area->dockWidgets() )
{
ads::CDockContainerWidget* subArea = dynamic_cast<ads::CDockContainerWidget*>( widget->widget() );
if ( subArea )
deleteAllChildrenToPreventLeak( subArea );
delete widget;
}
delete area;
}
}
DockInDockManager::DockInDockManager( DockInDockWidget& parent ) : DockInDockManager::DockInDockManager( DockInDockWidget& parent ) :
baseClass( &parent ), baseClass( &parent ),
m_parent( parent ) m_parent( parent )
@ -49,7 +24,7 @@ DockInDockManager::DockInDockManager( DockInDockWidget& parent ) :
DockInDockManager::~DockInDockManager() DockInDockManager::~DockInDockManager()
{ {
deleteAllChildrenToPreventLeak( this );
} }
void DockInDockManager::fillViewMenu( QMenu* menu, const std::vector<DockInDockManager*>& moveTo ) void DockInDockManager::fillViewMenu( QMenu* menu, const std::vector<DockInDockManager*>& moveTo )