Skip to content

Commit 7abc698

Browse files
Fixed #594 - Destruction of CDockWidget inside a CFloatingDockContainer
1 parent 5b23248 commit 7abc698

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

src/FloatingDockContainer.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -764,6 +764,31 @@ CFloatingDockContainer::CFloatingDockContainer(CDockWidget *DockWidget) :
764764
CFloatingDockContainer::~CFloatingDockContainer()
765765
{
766766
ADS_PRINT("~CFloatingDockContainer");
767+
std::vector<QPointer<ads::CDockAreaWidget>> areas;
768+
for (int i = 0; i != dockContainer()->dockAreaCount(); ++i)
769+
{
770+
areas.push_back( dockContainer()->dockArea(i) );
771+
}
772+
for (auto area : areas)
773+
{
774+
if (!area)
775+
{
776+
continue;
777+
}
778+
779+
// QPointer delete safety - just in case some dock wigdet in destruction
780+
// deletes another related/twin or child dock widget.
781+
std::vector<QPointer<QWidget>> deleteWidgets;
782+
for (auto widget : area->dockWidgets())
783+
{
784+
deleteWidgets.push_back(widget);
785+
}
786+
for (auto ptrWdg : deleteWidgets)
787+
{
788+
delete ptrWdg;
789+
}
790+
}
791+
767792
if (d->DockManager)
768793
{
769794
d->DockManager->removeFloatingWidget(this);

0 commit comments

Comments
 (0)