mirror of
https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System.git
synced 2024-12-24 23:31:32 +08:00
Updated CFloatingDockContainer::closeEvent() function to delete all dock widgets with DockWidgetDeleteOnClose flag set
This commit is contained in:
parent
3d3b694040
commit
78a4166e42
@ -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
|
||||||
{
|
{
|
||||||
|
@ -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()
|
||||||
|
@ -802,29 +802,33 @@ 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();
|
return;
|
||||||
if (TopLevelDockWidget && TopLevelDockWidget->features().testFlag(CDockWidget::DockWidgetDeleteOnClose))
|
|
||||||
{
|
|
||||||
if (!TopLevelDockWidget->closeDockWidgetInternal())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// In Qt version after 5.9.2 there seems to be a bug that causes the
|
|
||||||
// QWidget::event() function to not receive any NonClientArea mouse
|
|
||||||
// events anymore after a close/show cycle. The bug is reported here:
|
|
||||||
// https://bugreports.qt.io/browse/QTBUG-73295
|
|
||||||
// The following code is a workaround for Qt versions > 5.9.2 that seems
|
|
||||||
// to work
|
|
||||||
// Starting from Qt version 5.12.2 this seems to work again. But
|
|
||||||
// now the QEvent::NonClientAreaMouseButtonPress function returns always
|
|
||||||
// Qt::RightButton even if the left button was pressed
|
|
||||||
this->hide();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
// QWidget::event() function to not receive any NonClientArea mouse
|
||||||
|
// events anymore after a close/show cycle. The bug is reported here:
|
||||||
|
// https://bugreports.qt.io/browse/QTBUG-73295
|
||||||
|
// The following code is a workaround for Qt versions > 5.9.2 that seems
|
||||||
|
// to work
|
||||||
|
// Starting from Qt version 5.12.2 this seems to work again. But
|
||||||
|
// now the QEvent::NonClientAreaMouseButtonPress function returns always
|
||||||
|
// Qt::RightButton even if the left button was pressed
|
||||||
|
this->hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
Loading…
Reference in New Issue
Block a user