Updated CFloatingDockContainer::closeEvent() function to delete all dock widgets with DockWidgetDeleteOnClose flag set

This commit is contained in:
Uwe Kindler 2022-03-25 13:31:40 +01:00
parent 3d3b694040
commit 78a4166e42
3 changed files with 46 additions and 21 deletions

View File

@ -1625,6 +1625,22 @@ QList<CDockAreaWidget*> CDockContainerWidget::openedDockAreas() const
} }
//============================================================================
QList<CDockWidget*> CDockContainerWidget::openedDockWidgets() const
{
QList<CDockWidget*> DockWidgetList;
for (auto DockArea : d->DockAreas)
{
if (!DockArea->isHidden())
{
DockWidgetList.append(DockArea->openedDockWidgets());
}
}
return DockWidgetList;
}
//============================================================================ //============================================================================
bool CDockContainerWidget::hasOpenDockAreas() const bool CDockContainerWidget::hasOpenDockAreas() const
{ {

View File

@ -216,6 +216,11 @@ public:
*/ */
QList<CDockAreaWidget*> openedDockAreas() const; QList<CDockAreaWidget*> openedDockAreas() const;
/**
* Returns a list for all open dock widgets in all open dock areas
*/
QList<CDockWidget*> openedDockWidgets() const;
/** /**
* This function returns true, if the container has open dock areas. * This function returns true, if the container has open dock areas.
* This functions is a little bit faster than calling openedDockAreas().isEmpty() * This functions is a little bit faster than calling openedDockAreas().isEmpty()

View File

@ -802,16 +802,21 @@ void CFloatingDockContainer::closeEvent(QCloseEvent *event)
ADS_PRINT("CFloatingDockContainer closeEvent"); ADS_PRINT("CFloatingDockContainer closeEvent");
d->setState(DraggingInactive); d->setState(DraggingInactive);
event->ignore(); event->ignore();
if (!isClosable())
if (isClosable())
{
auto TopLevelDockWidget = topLevelDockWidget();
if (TopLevelDockWidget && TopLevelDockWidget->features().testFlag(CDockWidget::DockWidgetDeleteOnClose))
{
if (!TopLevelDockWidget->closeDockWidgetInternal())
{ {
return; return;
} }
for (auto DockWidget : d->DockContainer->openedDockWidgets())
{
if (DockWidget->features().testFlag(CDockWidget::DockWidgetDeleteOnClose))
{
DockWidget->closeDockWidgetInternal();
}
else
{
DockWidget->toggleView(false);
}
} }
// In Qt version after 5.9.2 there seems to be a bug that causes the // In Qt version after 5.9.2 there seems to be a bug that causes the
@ -824,7 +829,6 @@ void CFloatingDockContainer::closeEvent(QCloseEvent *event)
// now the QEvent::NonClientAreaMouseButtonPress function returns always // now the QEvent::NonClientAreaMouseButtonPress function returns always
// Qt::RightButton even if the left button was pressed // Qt::RightButton even if the left button was pressed
this->hide(); this->hide();
}
} }
//============================================================================ //============================================================================